int main(int argc, const char * const *argv) { const char *env_pkgname; int ret; dpkg_locales_init(PACKAGE); dpkg_program_init("dpkg-divert"); dpkg_options_parse(&argv, cmdinfos, printforhelp); admindir = dpkg_db_set_dir(admindir); instdir = dpkg_fsys_set_dir(instdir); env_pkgname = getenv("DPKG_MAINTSCRIPT_PACKAGE"); if (opt_pkgname_match_any && env_pkgname) set_package(NULL, env_pkgname); if (!cipaction) setaction(&cmdinfo_add, NULL); modstatdb_open(msdbrw_readonly); fsys_hash_init(); ensure_diversions(); ret = cipaction->action(argv); modstatdb_shutdown(); dpkg_program_done(); return ret; }
int main(int argc, const char *const *argv) { int ret; dpkg_locales_init(PACKAGE); dpkg_program_init("dpkg"); dpkg_options_load(DPKG, cmdinfos); dpkg_options_parse(&argv, cmdinfos, printforhelp); if (!cipaction) badusage(_("need an action option")); admindir = dpkg_db_set_dir(admindir); /* Always set environment, to avoid possible security risks. */ if (setenv("DPKG_ADMINDIR", admindir, 1) < 0) ohshite(_("unable to setenv for subprocesses")); if (!f_triggers) f_triggers = (cipaction->arg_int == act_triggers && *argv) ? -1 : 1; if (is_invoke_action(cipaction->arg_int)) { run_invoke_hooks(cipaction->olong, pre_invoke_hooks); run_status_loggers(status_loggers); } filesdbinit(); ret = cipaction->action(argv); if (is_invoke_action(cipaction->arg_int)) run_invoke_hooks(cipaction->olong, post_invoke_hooks); dpkg_program_done(); return reportbroken_retexitstatus(ret); }
int main(int argc, const char *const *argv) { const char *badname; enum trigdef_update_flags tduf; enum trigdef_update_status tdus; dpkg_locales_init(PACKAGE); dpkg_program_init("dpkg-trigger"); dpkg_options_parse(&argv, cmdinfos, printforhelp); admindir = dpkg_db_set_dir(admindir); if (f_check) { if (*argv) badusage(_("--%s takes no arguments"), "check-supported"); return do_check(); } if (!*argv || argv[1]) badusage(_("takes one argument, the trigger name")); badname = parse_awaiter_package(); if (badname) badusage(_("illegal awaited package name '%.250s': %.250s"), bypackage, badname); fsys_hash_init(); activate = argv[0]; badname = trig_name_is_illegal(activate); if (badname) badusage(_("invalid trigger name '%.250s': %.250s"), activate, badname); trigdef_set_methods(&tdm_add); tduf = TDUF_NO_LOCK_OK; if (!f_noact) tduf |= TDUF_WRITE | TDUF_WRITE_IF_EMPTY; tdus = trigdef_update_start(tduf); if (tdus >= 0) { trigdef_parse(); if (!done_trig) trigdef_update_printf("%s %s\n", activate, bypackage); trigdef_process_done(); } dpkg_program_done(); return 0; }
int main(int argc, const char *const *argv) { int ret; dpkg_locales_init(PACKAGE); dpkg_program_init("dpkg"); dpkg_options_load(DPKG, cmdinfos); dpkg_options_parse(&argv, cmdinfos, printforhelp); /* When running as root, make sure our primary group is also root, so * that files created by maintainer scripts have correct ownership. */ if (!fc_nonroot && getuid() == 0) if (setgid(0) < 0) ohshite(_("cannot set primary group ID to root")); if (!cipaction) badusage(_("need an action option")); admindir = dpkg_db_set_dir(admindir); /* Always set environment, to avoid possible security risks. */ if (setenv("DPKG_ADMINDIR", admindir, 1) < 0) ohshite(_("unable to setenv for subprocesses")); if (setenv("DPKG_ROOT", instdir, 1) < 0) ohshite(_("unable to setenv for subprocesses")); if (!f_triggers) f_triggers = (cipaction->arg_int == act_triggers && *argv) ? -1 : 1; if (is_invoke_action(cipaction->arg_int)) { run_invoke_hooks(cipaction->olong, &pre_invoke_hooks); run_status_loggers(&status_loggers); } filesdbinit(); ret = cipaction->action(argv); if (is_invoke_action(cipaction->arg_int)) run_invoke_hooks(cipaction->olong, &post_invoke_hooks); dpkg_program_done(); return reportbroken_retexitstatus(ret); }
int main(int argc, const char *const *argv) { int ret; dpkg_locales_init(PACKAGE); dpkg_program_init("dpkg-statoverride"); dpkg_options_parse(&argv, cmdinfos, printforhelp); admindir = dpkg_db_set_dir(admindir); if (!cipaction) badusage(_("need an action option")); filesdbinit(); ensure_statoverrides(); ret = cipaction->action(argv); dpkg_program_done(); return ret; }
int commandfd(const char *const *argv) { struct varbuf linevb = VARBUF_INIT; const char * pipein; const char **newargs = NULL; char *ptr, *endptr; FILE *in; long infd; int ret = 0; int c, lno, i; bool skipchar; pipein = *argv++; if (pipein == NULL || *argv) badusage(_("--%s takes exactly one argument"), cipaction->olong); infd = dpkg_options_parse_arg_int(cipaction, pipein); in = fdopen(infd, "r"); if (in == NULL) ohshite(_("couldn't open '%i' for stream"), (int)infd); for (;;) { bool mode = false; int argc= 1; lno= 0; push_error_context(); do { c = getc(in); if (c == '\n') lno++; } while (c != EOF && c_isspace(c)); if (c == EOF) break; if (c == '#') { do { c= getc(in); if (c == '\n') lno++; } while (c != EOF && c != '\n'); continue; } varbuf_reset(&linevb); do { varbuf_add_char(&linevb, c); c= getc(in); if (c == '\n') lno++; /* This isn't fully accurate, but overestimating can't hurt. */ if (c_isspace(c)) argc++; } while (c != EOF && c != '\n'); if (c == EOF) ohshit(_("unexpected end of file before end of line %d"), lno); if (!argc) continue; varbuf_end_str(&linevb); newargs = m_realloc(newargs, sizeof(const char *) * (argc + 1)); argc= 1; ptr= linevb.buf; endptr = ptr + linevb.used + 1; skipchar = false; while(ptr < endptr) { if (skipchar) { skipchar = false; } else if (*ptr == '\\') { memmove(ptr, (ptr+1), (linevb.used-(linevb.buf - ptr)-1)); endptr--; skipchar = true; continue; } else if (c_isspace(*ptr)) { if (mode == true) { *ptr = '\0'; mode = false; } } else { if (mode == false) { newargs[argc]= ptr; argc++; mode = true; } } ptr++; } *ptr = '\0'; newargs[argc++] = NULL; /* We strdup() each argument, but never free it, because the * error messages contain references back to these strings. * Freeing them, and reusing the memory, would make those * error messages confusing, to say the least. */ for(i=1;i<argc;i++) if (newargs[i]) newargs[i] = m_strdup(newargs[i]); setaction(NULL, NULL); dpkg_options_parse((const char *const **)&newargs, cmdinfos, printforhelp); if (!cipaction) badusage(_("need an action option")); ret |= cipaction->action(newargs); pop_error_context(ehflag_normaltidy); } return ret; }