int main (int argc, char* argv[]) { setlocale (LC_ALL, argv[1]); if (rpmatch (argv[2]) != atol (argv[3])) { fprintf (stderr,"Failed: Locale %s, String %s, Exp: %s, got %d\n", argv[1], argv[2], argv[3], rpmatch (argv[2])); exit (EXIT_FAILURE); } return EXIT_SUCCESS; }
int get_user_reply(struct fdisk_context *cxt, const char *prompt, char *buf, size_t bufsz) { char *p; size_t sz; do { #ifdef HAVE_LIBREADLINE if (isatty(STDIN_FILENO)) { if (!rl_fgets(buf, bufsz, stdout, prompt)) { if (fdisk_label_is_changed(fdisk_get_label(cxt, NULL))) { if (rl_fgets(buf, bufsz, stderr, _("\nDo you really want to quit? ")) && !rpmatch(buf)) continue; } fdisk_unref_context(cxt); exit(EXIT_FAILURE); } else break; } else #endif { fputs(prompt, stdout); fflush(stdout); if (!fgets(buf, bufsz, stdin)) { if (fdisk_label_is_changed(fdisk_get_label(cxt, NULL))) { fprintf(stderr, _("\nDo you really want to quit? ")); if (fgets(buf, bufsz, stdin) && !rpmatch(buf)) continue; } fdisk_unref_context(cxt); exit(EXIT_FAILURE); } else break; } } while (1); for (p = buf; *p && !isgraph(*p); p++); /* get first non-blank */ if (p > buf) memmove(buf, p, p - buf); /* remove blank space */ sz = strlen(buf); if (sz && *(buf + sz - 1) == '\n') *(buf + sz - 1) = '\0'; DBG(ASK, ul_debug("user's reply: >>>%s<<<", buf)); return 0; }
bool yesno (void) { bool yes; #if ENABLE_NLS char *response = NULL; size_t response_size = 0; ssize_t response_len = getline (&response, &response_size, stdin); if (response_len <= 0) yes = false; else { response[response_len - 1] = '\0'; yes = (0 < rpmatch (response)); } free (response); #else /* Test against "^[yY]", hardcoded to avoid requiring getline, regex, and rpmatch. */ int c = getchar (); yes = (c == 'y' || c == 'Y'); while (c != '\n' && c != EOF) c = getchar (); #endif return yes; }
static int get_user_reply(struct fdisk_context *cxt, char *prompt, char *buf, size_t bufsz) { char *p; size_t sz; do { fputs(prompt, stdout); fflush(stdout); if (!fgets(buf, bufsz, stdin)) { if (fdisk_label_is_changed(cxt->label)) { fprintf(stderr, _("Do you really want to quit? ")); if (fgets(buf, bufsz, stdin) && !rpmatch(buf)) continue; } fdisk_free_context(cxt); exit(EXIT_FAILURE); } else break; } while (1); for (p = buf; *p && !isgraph(*p); p++); /* get first non-blank */ if (p > buf) memmove(buf, p, p - buf); /* remove blank space */ sz = strlen(buf); if (sz && *(buf + sz - 1) == '\n') *(buf + sz - 1) = '\0'; DBG(ASK, dbgprint("user's reply: >>>%s<<<", buf)); return 0; }
static int ask(char *name) { int c; char buf[2]; printf(_("%s: overwrite `%s'? "), program_invocation_short_name, name); fflush(stdout); if ((c = fgetc(stdin)) == EOF) { buf[0] = 'n'; printf("n\n"); } else { buf[0] = c; if (c != '\n' && tty_cbreak) { #ifdef HAVE___FPURGE /* Possibly purge a multi-byte character; or do a required purge of the rest of the line (including the newline) if the tty has been put back in canonical mode (for example by a shell after a SIGTSTP signal). */ __fpurge(stdin); #endif printf("\n"); } else if (c != '\n') while ((c = fgetc(stdin)) != '\n' && c != EOF); } buf[1] = '\0'; if (rpmatch(buf) == RPMATCH_YES) return 0; else return 1; }
static int ask (char *name, pid_t pid, const int signal) { int res; size_t len; char *line; line = NULL; len = 0; do { if (signal == SIGTERM) printf (_("Kill %s(%s%d) ? (y/N) "), name, process_group ? "pgid " : "", pid); else printf (_("Signal %s(%s%d) ? (y/N) "), name, process_group ? "pgid " : "", pid); fflush (stdout); if (getline (&line, &len, stdin) < 0) return 0; /* Check for default */ if (line[0] == '\n') { free(line); return 0; } res = rpmatch(line); if (res >= 0) { free(line); return res; } } while(1); /* Never should get here */ }
static int ask_callback(struct fdisk_context *cxt, struct fdisk_ask *ask, void *data) { struct sfdisk *sf = (struct sfdisk *) data; int rc = 0; assert(cxt); assert(ask); switch(fdisk_ask_get_type(ask)) { case FDISK_ASKTYPE_INFO: if (sf->quiet) break; fputs(fdisk_ask_print_get_mesg(ask), stdout); fputc('\n', stdout); break; case FDISK_ASKTYPE_WARNX: color_scheme_fenable("warn", UL_COLOR_RED, stderr); fputs(fdisk_ask_print_get_mesg(ask), stderr); color_fdisable(stderr); fputc('\n', stderr); break; case FDISK_ASKTYPE_WARN: color_scheme_fenable("warn", UL_COLOR_RED, stderr); fputs(fdisk_ask_print_get_mesg(ask), stderr); errno = fdisk_ask_print_get_errno(ask); fprintf(stderr, ": %m\n"); color_fdisable(stderr); break; case FDISK_ASKTYPE_YESNO: { char buf[BUFSIZ]; fputc('\n', stdout); do { int x; fputs(fdisk_ask_get_query(ask), stdout); rc = get_user_reply(_(" [Y]es/[N]o: "), buf, sizeof(buf)); if (rc) break; x = rpmatch(buf); if (x == RPMATCH_YES || x == RPMATCH_NO) { fdisk_ask_yesno_set_result(ask, x); break; } } while(1); DBG(ASK, ul_debug("yes-no ask: reply '%s' [rc=%d]", buf, rc)); break; } default: break; } return rc; }
int main(int argc, char *argv[]) { setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); atexit(close_stdout); if (!strcmp(program_invocation_short_name, "vigr")) { program = VIGR; xstrncpy(orig_file, GROUP_FILE, sizeof(orig_file)); } else { program = VIPW; xstrncpy(orig_file, PASSWD_FILE, sizeof(orig_file)); } if (1 < argc) { if (!strcmp(argv[1], "-V") || !strcmp(argv[1], "--version")) { printf(UTIL_LINUX_VERSION); exit(EXIT_SUCCESS); } if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) usage(stdout); usage(stderr); } edit_file(0); if (program == VIGR) { strncpy(orig_file, SGROUP_FILE, FILENAMELEN - 1); } else { strncpy(orig_file, SHADOW_FILE, FILENAMELEN - 1); } if (access(orig_file, F_OK) == 0) { char response[80]; printf((program == VIGR) ? _("You are using shadow groups on this system.\n") : _("You are using shadow passwords on this system.\n")); /* TRANSLATORS: this program uses for y and n rpmatch(3), * which means they can be translated. */ printf(_("Would you like to edit %s now [y/n]? "), orig_file); if (fgets(response, sizeof(response), stdin)) { if (rpmatch(response) == RPMATCH_YES) edit_file(1); } } exit(EXIT_SUCCESS); }
int yesno () { /* We make some assumptions here: a) leading white space in the response are not vital b) the first 128 characters of the answer are enough (the rest can be ignored) I cannot think for a situation where this is not ok. --drepper@gnu */ char buf[128]; int len = 0; int c; while ((c = getchar ()) != EOF && c != '\n') if ((len > 0 && len < 127) || (len == 0 && !isspace (c))) buf[len++] = c; buf[len] = '\0'; return rpmatch (buf) == 1; }
/* * queryuser -- * print a message to standard error and then read input from standard * input. If the input is an affirmative response (according to the * current locale) then 1 is returned. */ int queryuser(char *argv[]) { char *p, resp[256]; (void)fprintf(stderr, "\"%s", *argv); while (*++argv) (void)fprintf(stderr, " %s", *argv); (void)fprintf(stderr, "\"? "); (void)fflush(stderr); if (fgets(resp, sizeof(resp), stdin) == NULL) *resp = '\0'; if ((p = strchr(resp, '\n')) != NULL) *p = '\0'; else { (void)fprintf(stderr, "\n"); (void)fflush(stderr); } return (rpmatch(resp) == 1); }
/* 0 = no, 1=yes */ static int ask(const pid_t pid) { int res; size_t len = 0; char *line = NULL; fflush(stdout); while (1) { fprintf(stderr, _("Kill process %d ? (y/N) "), pid); fflush(stderr); if (getline(&line, &len, stdin) < 0) return 0; if (line[0] == '\n') { free(line); return 0; } res = rpmatch(line); if (res >= 0) { free(line); return res; } } /* while */ }
int main (int argc, char **argv) { GError *error = NULL; static char **override_autostart_dirs = NULL; static char *opt_session_name = NULL; const char *debug_string = NULL; gboolean gl_failed = FALSE; guint name_owner_id; GOptionContext *options; static GOptionEntry entries[] = { { "autostart", 'a', 0, G_OPTION_ARG_STRING_ARRAY, &override_autostart_dirs, N_("Override standard autostart directories"), N_("AUTOSTART_DIR") }, { "session", 0, 0, G_OPTION_ARG_STRING, &opt_session_name, N_("Session to use"), N_("SESSION_NAME") }, { "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL }, { "failsafe", 'f', 0, G_OPTION_ARG_NONE, &failsafe, N_("Do not load user-specified applications"), NULL }, { "version", 0, 0, G_OPTION_ARG_NONE, &show_version, N_("Version of this application"), NULL }, /* Translators: the 'fail whale' is the black dialog we show when something goes seriously wrong */ { "whale", 0, 0, G_OPTION_ARG_NONE, &please_fail, N_("Show the fail whale dialog for testing"), NULL }, { "disable-acceleration-check", 0, 0, G_OPTION_ARG_NONE, &disable_acceleration_check, N_("Disable hardware acceleration check"), NULL }, { NULL, 0, 0, 0, NULL, NULL, NULL } }; /* Make sure that we have a session bus */ if (!require_dbus_session (argc, argv, &error)) { gsm_util_init_error (TRUE, "%s", error->message); } /* From 3.14 GDM sets XDG_CURRENT_DESKTOP. For compatibility with * older versions of GDM, other display managers, and startx, * set a fallback value if we don't find it set. */ if (g_getenv ("XDG_CURRENT_DESKTOP") == NULL) { g_setenv("XDG_CURRENT_DESKTOP", "GNOME", TRUE); gsm_util_setenv ("XDG_CURRENT_DESKTOP", "GNOME"); } /* Make sure we initialize gio in a way that does not autostart any daemon */ initialize_gio (); setlocale (LC_ALL, ""); bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); debug_string = g_getenv ("GNOME_SESSION_DEBUG"); if (debug_string != NULL) { debug = rpmatch (debug_string) == TRUE || atoi (debug_string) == 1; } error = NULL; options = g_option_context_new (_(" - the GNOME session manager")); g_option_context_add_main_entries (options, entries, GETTEXT_PACKAGE); g_option_context_parse (options, &argc, &argv, &error); if (error != NULL) { g_warning ("%s", error->message); exit (1); } g_option_context_free (options); /* Rebind stdout/stderr to the journal explicitly, so that * journald picks ups the nicer "gnome-session" as the program * name instead of whatever shell script GDM happened to use. */ #ifdef HAVE_SYSTEMD if (!debug) { int journalfd; journalfd = sd_journal_stream_fd (PACKAGE, LOG_INFO, 0); if (journalfd >= 0) { dup2(journalfd, 1); dup2(journalfd, 2); } } #endif gdm_log_init (); gdm_log_set_debug (debug); if (disable_acceleration_check) { g_debug ("hardware acceleration check is disabled"); } else { /* Check GL, if it doesn't work out then force software fallback */ if (!check_gl (&error)) { gl_failed = TRUE; g_debug ("hardware acceleration check failed: %s", error? error->message : ""); g_clear_error (&error); if (g_getenv ("LIBGL_ALWAYS_SOFTWARE") == NULL) { g_setenv ("LIBGL_ALWAYS_SOFTWARE", "1", TRUE); if (!check_gl (&error)) { g_warning ("software acceleration check failed: %s", error? error->message : ""); g_clear_error (&error); } else { gl_failed = FALSE; } } } } if (show_version) { g_print ("%s %s\n", argv [0], VERSION); exit (0); } if (gl_failed) { gsm_fail_whale_dialog_we_failed (FALSE, TRUE, NULL); gsm_main (); exit (1); } if (please_fail) { gsm_fail_whale_dialog_we_failed (TRUE, TRUE, NULL); gsm_main (); exit (1); } { gchar *ibus_path; ibus_path = g_find_program_in_path("ibus-daemon"); if (ibus_path) { const gchar *p; p = g_getenv ("QT_IM_MODULE"); if (!p || !*p) p = "ibus"; gsm_util_setenv ("QT_IM_MODULE", p); p = g_getenv ("XMODIFIERS"); if (!p || !*p) p = "@im=ibus"; gsm_util_setenv ("XMODIFIERS", p); } g_free (ibus_path); } /* Some third-party programs rely on GNOME_DESKTOP_SESSION_ID to * detect if GNOME is running. We keep this for compatibility reasons. */ gsm_util_setenv ("GNOME_DESKTOP_SESSION_ID", "this-is-deprecated"); /* We want to use the GNOME menus which has the designed categories. */ gsm_util_setenv ("XDG_MENU_PREFIX", "gnome-"); /* hack to fix keyring until we can reorder things in 3.20 * https://bugzilla.gnome.org/show_bug.cgi?id=738205 */ if (g_strcmp0 (g_getenv ("XDG_SESSION_TYPE"), "wayland") == 0 && g_getenv ("GSM_SKIP_SSH_AGENT_WORKAROUND") == NULL) { char *ssh_socket; ssh_socket = g_build_filename (g_get_user_runtime_dir (), "keyring", "ssh", NULL); gsm_util_setenv ("SSH_AUTH_SOCK", ssh_socket); g_free (ssh_socket); } gsm_util_set_autostart_dirs (override_autostart_dirs); session_name = opt_session_name; /* Talk to logind before acquiring a name, since it does synchronous * calls at initialization time that invoke a main loop and if we * already owned a name, then we would service too early during * that main loop. */ g_object_unref (gsm_get_system ()); name_owner_id = acquire_name (); gsm_main (); g_clear_object (&manager); g_free (gl_renderer); g_bus_unown_name (name_owner_id); gdm_log_shutdown (); return 0; }
int main(int argc, char *argv[]) { struct stat sb; char *tty; int ch, verbose = FALSE; setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); atexit(close_stdout); static const struct option longopts[] = { { "verbose", no_argument, 0, 'v' }, { "version", no_argument, 0, 'V' }, { "help", no_argument, 0, 'h' }, { NULL, 0, 0, 0 } }; while ((ch = getopt_long(argc, argv, "vVh", longopts, NULL)) != -1) switch (ch) { case 'v': verbose = TRUE; break; case 'V': printf(_("%s from %s\n"), program_invocation_short_name, PACKAGE_STRING); exit(EXIT_SUCCESS); case 'h': usage(stdout); default: usage(stderr); } argc -= optind; argv += optind; if ((tty = ttyname(STDERR_FILENO)) == NULL) err(MESG_EXIT_FAILURE, _("ttyname failed")); if (stat(tty, &sb) < 0) err(MESG_EXIT_FAILURE, _("stat %s failed"), tty); if (!*argv) { if (sb.st_mode & (S_IWGRP | S_IWOTH)) { puts(_("is y")); return IS_ALLOWED; } puts(_("is n")); return IS_NOT_ALLOWED; } switch (rpmatch(argv[0])) { case 1: #ifdef USE_TTY_GROUP if (chmod(tty, sb.st_mode | S_IWGRP) < 0) #else if (chmod(tty, sb.st_mode | S_IWGRP | S_IWOTH) < 0) #endif err(MESG_EXIT_FAILURE, _("change %s mode failed"), tty); if (verbose) puts(_("write access to your terminal is allowed")); return IS_ALLOWED; case 0: if (chmod(tty, sb.st_mode & ~(S_IWGRP|S_IWOTH)) < 0) err(MESG_EXIT_FAILURE, _("change %s mode failed"), tty); if (verbose) puts(_("write access to your terminal is denied")); return IS_NOT_ALLOWED; case -1: warnx(_("invalid argument: %s"), argv[0]); usage(stderr); default: abort(); } }