From 93d568ec00b88f76748cbf48401cd8219c5a7b4e Mon Sep 17 00:00:00 2001 From: Maxim Slipenko Date: Sun, 13 Apr 2025 17:49:02 +0300 Subject: [PATCH] command info --- info.go | 58 ++++++++++++++++---------- internal/translations/default.pot | 24 ++++++----- internal/translations/po/ru/default.po | 28 +++++++------ internal/utils/cmd.go | 20 +++++++++ pkg/repos/pull.go | 1 + 5 files changed, 85 insertions(+), 46 deletions(-) diff --git a/info.go b/info.go index 3870fba..69429ea 100644 --- a/info.go +++ b/info.go @@ -33,6 +33,7 @@ import ( "gitea.plemya-x.ru/Plemya-x/ALR/internal/config" database "gitea.plemya-x.ru/Plemya-x/ALR/internal/db" "gitea.plemya-x.ru/Plemya-x/ALR/internal/overrides" + "gitea.plemya-x.ru/Plemya-x/ALR/internal/utils" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro" "gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos" ) @@ -49,9 +50,15 @@ func InfoCmd() *cli.Command { }, }, BashComplete: func(c *cli.Context) { + err := utils.ExitIfCantDropCapsToAlrUser() + if err != nil { + slog.Error("Can't drop caps") + os.Exit(1) + } + ctx := c.Context cfg := config.New() - err := cfg.Load() + err = cfg.Load() if err != nil { slog.Error(gotext.Get("Error loading config"), "err", err) os.Exit(1) @@ -83,45 +90,50 @@ func InfoCmd() *cli.Command { } }, Action: func(c *cli.Context) error { + err := utils.ExitIfCantDropCapsToAlrUser() + if err != nil { + return err + } + ctx := c.Context cfg := config.New() - err := cfg.Load() + err = cfg.Load() if err != nil { - slog.Error(gotext.Get("Error loading config"), "err", err) - os.Exit(1) + slog.Error(gotext.Get("Error loading config")) + return cli.Exit(err, 1) } db := database.New(cfg) err = db.Init(ctx) if err != nil { - slog.Error(gotext.Get("Error initialization database"), "err", err) - os.Exit(1) + slog.Error(gotext.Get("Error initialization database")) + return cli.Exit(err, 1) } rs := repos.New(cfg, db) args := c.Args() if args.Len() < 1 { - slog.Error(gotext.Get("Command info expected at least 1 argument, got %d", args.Len())) - os.Exit(1) + return cli.Exit(gotext.Get("Command info expected at least 1 argument, got %d", args.Len()), 1) } if cfg.AutoPull() { err := rs.Pull(ctx, cfg.Repos()) if err != nil { - slog.Error(gotext.Get("Error pulling repos"), "err", err) - os.Exit(1) + slog.Error(gotext.Get("Error pulling repos")) + return cli.Exit(err, 1) } } found, _, err := rs.FindPkgs(ctx, args.Slice()) if err != nil { - slog.Error(gotext.Get("Error finding packages"), "err", err) - os.Exit(1) + slog.Error(gotext.Get("Error finding packages")) + return cli.Exit(err, 1) } if len(found) == 0 { - os.Exit(1) + slog.Error(gotext.Get("Package not found")) + return cli.Exit(err, 1) } pkgs := cliutils.FlattenPkgs(ctx, found, "show", c.Bool("interactive")) @@ -131,8 +143,8 @@ func InfoCmd() *cli.Command { systemLang, err := locale.GetLanguage() if err != nil { - slog.Error("Can't detect system language", "err", err) - os.Exit(1) + slog.Error(gotext.Get("Can't detect system language")) + return cli.Exit(err, 1) } if systemLang == "" { systemLang = "en" @@ -141,8 +153,8 @@ func InfoCmd() *cli.Command { if !all { info, err := distro.ParseOSRelease(ctx) if err != nil { - slog.Error(gotext.Get("Error parsing os-release file"), "err", err) - os.Exit(1) + slog.Error(gotext.Get("Error parsing os-release file")) + return cli.Exit(err, 1) } names, err = overrides.Resolve( info, @@ -150,8 +162,8 @@ func InfoCmd() *cli.Command { WithLanguages([]string{systemLang}), ) if err != nil { - slog.Error(gotext.Get("Error resolving overrides"), "err", err) - os.Exit(1) + slog.Error(gotext.Get("Error resolving overrides")) + return cli.Exit(err, 1) } } @@ -159,14 +171,14 @@ func InfoCmd() *cli.Command { if !all { err = yaml.NewEncoder(os.Stdout).Encode(overrides.ResolvePackage(&pkg, names)) if err != nil { - slog.Error(gotext.Get("Error encoding script variables"), "err", err) - os.Exit(1) + slog.Error(gotext.Get("Error encoding script variables")) + return cli.Exit(err, 1) } } else { err = yaml.NewEncoder(os.Stdout).Encode(pkg) if err != nil { - slog.Error(gotext.Get("Error encoding script variables"), "err", err) - os.Exit(1) + slog.Error(gotext.Get("Error encoding script variables")) + return cli.Exit(err, 1) } } diff --git a/internal/translations/default.pot b/internal/translations/default.pot index 596b505..81894c3 100644 --- a/internal/translations/default.pot +++ b/internal/translations/default.pot @@ -134,39 +134,43 @@ msgstr "" msgid "No such helper command" msgstr "" -#: info.go:43 +#: info.go:44 msgid "Print information about a package" msgstr "" -#: info.go:48 +#: info.go:49 msgid "Show all information, not just for the current distro" msgstr "" -#: info.go:69 +#: info.go:76 msgid "Error getting packages" msgstr "" -#: info.go:78 +#: info.go:85 msgid "Error iterating over packages" msgstr "" -#: info.go:105 +#: info.go:117 msgid "Command info expected at least 1 argument, got %d" msgstr "" -#: info.go:119 +#: info.go:130 msgid "Error finding packages" msgstr "" -#: info.go:144 +#: info.go:146 +msgid "Can't detect system language" +msgstr "" + +#: info.go:156 msgid "Error parsing os-release file" msgstr "" -#: info.go:153 +#: info.go:165 msgid "Error resolving overrides" msgstr "" -#: info.go:162 info.go:168 +#: info.go:174 info.go:180 msgid "Error encoding script variables" msgstr "" @@ -315,7 +319,7 @@ msgstr "" msgid "ERROR" msgstr "" -#: internal/utils/cmd.go:74 +#: internal/utils/cmd.go:94 msgid "You need to be root to perform this action" msgstr "" diff --git a/internal/translations/po/ru/default.po b/internal/translations/po/ru/default.po index b83cae7..ba243c1 100644 --- a/internal/translations/po/ru/default.po +++ b/internal/translations/po/ru/default.po @@ -148,39 +148,44 @@ msgstr "Каталог, в который будут устанавливать msgid "No such helper command" msgstr "Такой вспомогательной команды нет" -#: info.go:43 +#: info.go:44 msgid "Print information about a package" msgstr "Отобразить информацию о пакете" -#: info.go:48 +#: info.go:49 msgid "Show all information, not just for the current distro" msgstr "Показывать всю информацию, не только для текущего дистрибутива" -#: info.go:69 +#: info.go:76 msgid "Error getting packages" msgstr "Ошибка при получении пакетов" -#: info.go:78 +#: info.go:85 msgid "Error iterating over packages" msgstr "Ошибка при переборе пакетов" -#: info.go:105 +#: info.go:117 msgid "Command info expected at least 1 argument, got %d" msgstr "Для команды info ожидался хотя бы 1 аргумент, получено %d" -#: info.go:119 +#: info.go:130 msgid "Error finding packages" msgstr "Ошибка при поиске пакетов" -#: info.go:144 +#: info.go:146 +#, fuzzy +msgid "Can't detect system language" +msgstr "Ошибка при парсинге языка системы" + +#: info.go:156 msgid "Error parsing os-release file" msgstr "Ошибка при разборе файла выпуска операционной системы" -#: info.go:153 +#: info.go:165 msgid "Error resolving overrides" msgstr "Ошибка устранения переорпеделений" -#: info.go:162 info.go:168 +#: info.go:174 info.go:180 msgid "Error encoding script variables" msgstr "Ошибка кодирования переменных скрита" @@ -330,7 +335,7 @@ msgstr "%s %s загружается — %s/с\n" msgid "ERROR" msgstr "ОШИБКА" -#: internal/utils/cmd.go:74 +#: internal/utils/cmd.go:94 msgid "You need to be root to perform this action" msgstr "" @@ -589,9 +594,6 @@ msgstr "Здесь нечего делать." #~ msgid "Error opening config file" #~ msgstr "Ошибка при открытии конфигурационного файла" -#~ msgid "Error parsing system language" -#~ msgstr "Ошибка при парсинге языка системы" - #~ msgid "Executing version()" #~ msgstr "Исполнение версия()" diff --git a/internal/utils/cmd.go b/internal/utils/cmd.go index b4439a0..bfdd8da 100644 --- a/internal/utils/cmd.go +++ b/internal/utils/cmd.go @@ -17,6 +17,8 @@ package utils import ( + "errors" + "log/slog" "os" "os/user" "strconv" @@ -66,6 +68,24 @@ func DropCapsToAlrUser() error { if err != nil { return err } + newUid := syscall.Getuid() + if newUid != uid { + return errors.New("new uid don't matches requested") + } + newGid := syscall.Getgid() + if newGid != gid { + return errors.New("new gid don't matches requested") + } + return nil +} + +// Returns cli.Exit to +func ExitIfCantDropCapsToAlrUser() error { + err := DropCapsToAlrUser() + if err != nil { + slog.Debug("dropping capabilities error", "err", err) + return cli.Exit(gotext.Get("Error dropping capabilities"), 1) + } return nil } diff --git a/pkg/repos/pull.go b/pkg/repos/pull.go index aabfbbd..2db951d 100644 --- a/pkg/repos/pull.go +++ b/pkg/repos/pull.go @@ -256,6 +256,7 @@ func (rs *Repos) updatePkg(ctx context.Context, repo types.Repo, runner *interp. return err } resolveOverrides(runner, pkg) + slog.Warn("inserting pkg", "pkg", pkg.BuildDepends) return rs.db.InsertPackage(ctx, *pkg) }