newgrp.c (229668) | newgrp.c (231994) |
---|---|
1/*- 2 * Copyright (c) 2002 Tim J. Robbins. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 15 unchanged lines hidden (view full) --- 24 * SUCH DAMAGE. 25 */ 26 27/* 28 * newgrp -- change to a new group 29 */ 30 31#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2002 Tim J. Robbins. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 15 unchanged lines hidden (view full) --- 24 * SUCH DAMAGE. 25 */ 26 27/* 28 * newgrp -- change to a new group 29 */ 30 31#include <sys/cdefs.h> |
32__FBSDID("$FreeBSD: head/usr.bin/newgrp/newgrp.c 229668 2012-01-05 23:08:11Z ghelmer $"); | 32__FBSDID("$FreeBSD: head/usr.bin/newgrp/newgrp.c 231994 2012-02-22 06:27:20Z kevlo $"); |
33 34#include <sys/types.h> 35 36#include <err.h> 37#include <errno.h> 38#include <grp.h> 39#include <libgen.h> 40#include <limits.h> --- 105 unchanged lines hidden (view full) --- 146static void 147addgroup(const char *grpname) 148{ 149 gid_t *grps; 150 long lgid, ngrps_max; 151 int dbmember, i, ngrps; 152 gid_t egid; 153 struct group *grp; | 33 34#include <sys/types.h> 35 36#include <err.h> 37#include <errno.h> 38#include <grp.h> 39#include <libgen.h> 40#include <limits.h> --- 105 unchanged lines hidden (view full) --- 146static void 147addgroup(const char *grpname) 148{ 149 gid_t *grps; 150 long lgid, ngrps_max; 151 int dbmember, i, ngrps; 152 gid_t egid; 153 struct group *grp; |
154 char *ep, *pass; | 154 char *ep, *pass, *cryptpw; |
155 char **p; 156 157 egid = getegid(); 158 159 /* Try it as a group name, then a group id. */ 160 if ((grp = getgrnam(grpname)) == NULL) 161 if ((lgid = strtol(grpname, &ep, 10)) <= 0 || *ep != '\0' || 162 (grp = getgrgid((gid_t)lgid)) == NULL ) { --- 10 unchanged lines hidden (view full) --- 173 dbmember = 1; 174 for (p = grp->gr_mem; *p != NULL; p++) 175 if (strcmp(*p, pwd->pw_name) == 0) { 176 dbmember = 1; 177 break; 178 } 179 if (!dbmember && *grp->gr_passwd != '\0' && getuid() != 0) { 180 pass = getpass("Password:"); | 155 char **p; 156 157 egid = getegid(); 158 159 /* Try it as a group name, then a group id. */ 160 if ((grp = getgrnam(grpname)) == NULL) 161 if ((lgid = strtol(grpname, &ep, 10)) <= 0 || *ep != '\0' || 162 (grp = getgrgid((gid_t)lgid)) == NULL ) { --- 10 unchanged lines hidden (view full) --- 173 dbmember = 1; 174 for (p = grp->gr_mem; *p != NULL; p++) 175 if (strcmp(*p, pwd->pw_name) == 0) { 176 dbmember = 1; 177 break; 178 } 179 if (!dbmember && *grp->gr_passwd != '\0' && getuid() != 0) { 180 pass = getpass("Password:"); |
181 if (pass == NULL || 182 strcmp(grp->gr_passwd, crypt(pass, grp->gr_passwd)) != 0) { | 181 if (pass == NULL) 182 return; 183 cryptpw = crypt(pass, grp->gr_passwd); 184 if (cryptpw == NULL || strcmp(grp->gr_passwd, cryptpw) != 0) { |
183 fprintf(stderr, "Sorry\n"); 184 return; 185 } 186 } 187 188 ngrps_max = sysconf(_SC_NGROUPS_MAX) + 1; 189 if ((grps = malloc(sizeof(gid_t) * ngrps_max)) == NULL) 190 err(1, "malloc"); --- 118 unchanged lines hidden --- | 185 fprintf(stderr, "Sorry\n"); 186 return; 187 } 188 } 189 190 ngrps_max = sysconf(_SC_NGROUPS_MAX) + 1; 191 if ((grps = malloc(sizeof(gid_t) * ngrps_max)) == NULL) 192 err(1, "malloc"); --- 118 unchanged lines hidden --- |