コード例 #1
0
ファイル: pw_nis.c プロジェクト: edgar-pek/PerspicuOS
static int
pw_nisupdate(const char * path, struct passwd * pwd, char const * user, int mode)
{
	char            pfx[32];
	char            pwbuf[PWBUFSZ];
	int             l = sprintf(pfx, "%s:", user);

	/*
	 * Update the passwd file first
	 */
	if (pwd == NULL)
		*pwbuf = '\0';
	else
		fmtpwentry(pwbuf, pwd, PWF_MASTER);
	return fileupdate(path, 0600, pwbuf, pfx, l, mode) != 0;
}
コード例 #2
0
ファイル: pw_user.c プロジェクト: AhmadTux/DragonFlyBSD
static int
print_user(struct passwd * pwd, int pretty, int v7)
{
	if (!pretty) {
		char            buf[_UC_MAXLINE];

		fmtpwentry(buf, pwd, v7 ? PWF_PASSWD : PWF_STANDARD);
		fputs(buf, stdout);
	} else {
		int		j;
		char           *p;
		struct group   *grp = GETGRGID(pwd->pw_gid);
		char            uname[60] = "User &", office[60] = "[None]",
		                wphone[60] = "[None]", hphone[60] = "[None]";
		char		acexpire[32] = "[None]", pwexpire[32] = "[None]";
		struct tm *    tptr;

		if ((p = strtok(pwd->pw_gecos, ",")) != NULL) {
			strlcpy(uname, p, sizeof(uname));
			if ((p = strtok(NULL, ",")) != NULL) {
				strlcpy(office, p, sizeof(office));
				if ((p = strtok(NULL, ",")) != NULL) {
					strlcpy(wphone, p, sizeof(wphone));
					if ((p = strtok(NULL, "")) != NULL) {
						strlcpy(hphone, p,
						    sizeof(hphone));
					}
				}
			}
		}
		/*
		 * Handle '&' in gecos field
		 */
		if ((p = strchr(uname, '&')) != NULL) {
			int             l = strlen(pwd->pw_name);
			int             m = strlen(p);

			memmove(p + l, p + 1, m);
			memmove(p, pwd->pw_name, l);
			*p = (char) toupper((unsigned char)*p);
		}
		if (pwd->pw_expire > (time_t)0 && (tptr = localtime(&pwd->pw_expire)) != NULL)
			strftime(acexpire, sizeof acexpire, "%c", tptr);
		if (pwd->pw_change > (time_t)0 && (tptr = localtime(&pwd->pw_change)) != NULL)
			strftime(pwexpire, sizeof pwexpire, "%c", tptr);
		printf("Login Name: %-15s   #%-12ld Group: %-15s   #%ld\n"
		       " Full Name: %s\n"
		       "      Home: %-26.26s      Class: %s\n"
		       "     Shell: %-26.26s     Office: %s\n"
		       "Work Phone: %-26.26s Home Phone: %s\n"
		       "Acc Expire: %-26.26s Pwd Expire: %s\n",
		       pwd->pw_name, (long) pwd->pw_uid,
		       grp ? grp->gr_name : "(invalid)", (long) pwd->pw_gid,
		       uname, pwd->pw_dir, pwd->pw_class,
		       pwd->pw_shell, office, wphone, hphone,
		       acexpire, pwexpire);
	        SETGRENT();
		j = 0;
		while ((grp=GETGRENT()) != NULL)
		{
			int     i = 0;
			while (grp->gr_mem[i] != NULL)
			{
				if (strcmp(grp->gr_mem[i], pwd->pw_name)==0)
				{
					printf(j++ == 0 ? "    Groups: %s" : ",%s", grp->gr_name);
					break;
				}
				++i;
			}
		}
		ENDGRENT();
		printf("%s", j ? "\n" : "");
	}
	return EXIT_SUCCESS;
}