gid = getgid();
/* Drop all privileges. */
- if (setresuid(uid, uid, uid) != 0) {
- perror("setresuid");
- exit(EXIT_FAILURE);
- }
if (setresgid(gid, gid, gid) != 0) {
perror("setresgid");
exit(EXIT_FAILURE);
}
+ if (setresuid(uid, uid, uid) != 0) {
+ perror("setresuid");
+ exit(EXIT_FAILURE);
+ }
/* Verify all privileges were dropped. */
if (getresuid(&ruid, &euid, &suid) != 0) {
#endif
static void usage(const char *argv0) {
- fprintf(stderr, "usage: %s [-X] [-m] <cmd args..>\n", argv0);
+ fprintf(stderr, "usage: %s [-X] [-m] [-v] <cmd args..>\n", argv0);
fprintf(stderr, "Pass wall messages to <cmd args..>.\n");
fprintf(stderr, "\n");
fprintf(stderr, "-X quit when the current X session terminates\n");
fprintf(stderr, "-m allow messages from normal users (like `mesg y`)\n");
+ fprintf(stderr, "-v display version\n");
#ifdef DONT_USE_X11
fprintf(stderr, "\n");
fprintf(stderr, "compiled without X11 support, -X disabled\n");
* the optstring with "+" fixes this behaver. This is not POSIX
* compatible, but the option should be ignored on other systems.
*/
- while ((option = getopt(argc, argv, "+Xmh")) != -1) {
+ while ((option = getopt(argc, argv, "+Xmhv")) != -1) {
switch (option) {
case 'X':
enable_x11 = 1;
break;
case 'm':
mesg_yes = 1;
+ break;
case 'h':
usage(argv[0]);
break;
+ case 'v':
+ printf("%s%s\n",
+ PACKAGE_STRING,
+ strlen(GIT_VERSION) ? " (Git " GIT_VERSION ")" : "");
+ exit(0);
+ break;
default:
fprintf(stderr, "%s: unknown option '%s'!\n\n",
argv[0], argv[optind - 1]);