Lines Matching +full:sig +full:- +full:dir

1 /*--
2 * SPDX-License-Identifier: BSD-3-Clause
11 * Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
66 static pid_t editpid = -1;
67 static int lockfd = -1;
75 pw_cont(int sig)
78 if (editpid != -1)
79 kill(editpid, sig);
88 pw_init(const char *dir, const char *master) in pw_init() argument
94 if (dir == NULL) { in pw_init()
97 if (strlen(dir) >= sizeof(passwd_dir)) { in pw_init()
99 return (-1); in pw_init()
101 strcpy(passwd_dir, dir); in pw_init()
105 if (dir == NULL) { in pw_init()
110 return (-1); in pw_init()
115 return (-1); in pw_init()
165 return (-1); in pw_lock()
169 * Might as well try to build one. Set the close-on-exec bit so in pw_lock()
177 if (lockfd == -1) { in pw_lock()
190 if (fstat(lockfd, &st) == -1) in pw_lock()
195 lockfd = -1; in pw_lock()
213 return (-1); in pw_tmp()
219 (int)(p - masterpasswd), masterpasswd) >= (int)sizeof(tempname)) { in pw_tmp()
221 return (-1); in pw_tmp()
223 if ((tfd = mkostemp(tempname, 0)) == -1) in pw_tmp()
224 return (-1); in pw_tmp()
225 if (mfd != -1) { in pw_tmp()
233 return (-1); in pw_tmp()
250 case -1: in pw_mkdb()
251 return (-1); in pw_mkdb()
255 execl(_PATH_PWD_MKDB, "pwd_mkdb", "-p", in pw_mkdb()
256 "-d", passwd_dir, tempname, (char *)NULL); in pw_mkdb()
258 execl(_PATH_PWD_MKDB, "pwd_mkdb", "-p", in pw_mkdb()
259 "-d", passwd_dir, "-u", user, tempname, in pw_mkdb()
267 if (waitpid(pid, &pstat, 0) == -1) in pw_mkdb()
268 return (-1); in pw_mkdb()
272 return (-1); in pw_mkdb()
276 * Edit the temp file. Return -1 on error, >0 if the file was modified, 0
290 if (stat(tempname, &st1) == -1) in pw_edit()
291 return (-1); in pw_edit()
301 case -1: in pw_edit()
302 return (-1); in pw_edit()
308 if (setgid(getgid()) == -1) in pw_edit()
310 if (setuid(getuid()) == -1) in pw_edit()
320 if (waitpid(editpid, &pstat, WUNTRACED) == -1) { in pw_edit()
324 editpid = -1; in pw_edit()
331 editpid = -1; in pw_edit()
335 editpid = -1; in pw_edit()
342 if (stat(tempname, &st2) == -1) in pw_edit()
343 return (-1); in pw_edit()
360 if (editpid != -1) { in pw_fini()
364 editpid = -1; in pw_fini()
370 if (lockfd != -1) in pw_fini()
381 return (strcmp(pw1->pw_name, pw2->pw_name) == 0 && in pw_equal()
382 pw1->pw_uid == pw2->pw_uid && in pw_equal()
383 pw1->pw_gid == pw2->pw_gid && in pw_equal()
384 strcmp(pw1->pw_class, pw2->pw_class) == 0 && in pw_equal()
385 pw1->pw_change == pw2->pw_change && in pw_equal()
386 pw1->pw_expire == pw2->pw_expire && in pw_equal()
387 strcmp(pw1->pw_gecos, pw2->pw_gecos) == 0 && in pw_equal()
388 strcmp(pw1->pw_dir, pw2->pw_dir) == 0 && in pw_equal()
389 strcmp(pw1->pw_shell, pw2->pw_shell) == 0); in pw_equal()
400 asprintf(&line, "%s:%s:%ju:%ju:%s:%ju:%ju:%s:%s:%s", pw->pw_name, in pw_make()
401 pw->pw_passwd, (uintmax_t)pw->pw_uid, (uintmax_t)pw->pw_gid, in pw_make()
402 pw->pw_class, (uintmax_t)pw->pw_change, (uintmax_t)pw->pw_expire, in pw_make()
403 pw->pw_gecos, pw->pw_dir, pw->pw_shell); in pw_make()
415 asprintf(&line, "%s:*:%ju:%ju:%s:%s:%s", pw->pw_name, in pw_make_v7()
416 (uintmax_t)pw->pw_uid, (uintmax_t)pw->pw_gid, in pw_make_v7()
417 pw->pw_gecos, pw->pw_dir, pw->pw_shell); in pw_make_v7()
436 return (-1); in pw_copy()
444 return (-1); in pw_copy()
468 while ((size_t)(q - p) >= size) { in pw_copy()
473 p = tmp + (p - buf); in pw_copy()
474 q = tmp + (q - buf); in pw_copy()
475 end = tmp + (end - buf); in pw_copy()
480 q = memmove(buf, p, end - p); in pw_copy()
481 end -= p - buf; in pw_copy()
485 readlen = read(ffd, end, size - (end - buf)); in pw_copy()
486 if (readlen == -1) in pw_copy()
493 len = end - buf; in pw_copy()
496 if (len > 0 && buf[len - 1] != '\n') in pw_copy()
507 if (write(tfd, p, q - p + 1) != q - p + 1) in pw_copy()
526 if (fpw == NULL || strcmp(fpw->pw_name, spw->pw_name) != 0) { in pw_copy()
530 if (write(tfd, p, q - p + 1) != q - p + 1) in pw_copy()
554 if (write(tfd, q, end - q) != end - q) in pw_copy()
562 if (readlen == -1) in pw_copy()
585 return (-1); in pw_copy()
609 if (pw->pw_name != NULL) in pw_dup()
610 len += strlen(pw->pw_name) + 1; in pw_dup()
611 if (pw->pw_passwd != NULL) in pw_dup()
612 len += strlen(pw->pw_passwd) + 1; in pw_dup()
613 if (pw->pw_class != NULL) in pw_dup()
614 len += strlen(pw->pw_class) + 1; in pw_dup()
615 if (pw->pw_gecos != NULL) in pw_dup()
616 len += strlen(pw->pw_gecos) + 1; in pw_dup()
617 if (pw->pw_dir != NULL) in pw_dup()
618 len += strlen(pw->pw_dir) + 1; in pw_dup()
619 if (pw->pw_shell != NULL) in pw_dup()
620 len += strlen(pw->pw_shell) + 1; in pw_dup()
625 if (pw->pw_name != NULL) { in pw_dup()
626 npw->pw_name = dst; in pw_dup()
627 dst = stpcpy(npw->pw_name, pw->pw_name) + 1; in pw_dup()
629 if (pw->pw_passwd != NULL) { in pw_dup()
630 npw->pw_passwd = dst; in pw_dup()
631 dst = stpcpy(npw->pw_passwd, pw->pw_passwd) + 1; in pw_dup()
633 if (pw->pw_class != NULL) { in pw_dup()
634 npw->pw_class = dst; in pw_dup()
635 dst = stpcpy(npw->pw_class, pw->pw_class) + 1; in pw_dup()
637 if (pw->pw_gecos != NULL) { in pw_dup()
638 npw->pw_gecos = dst; in pw_dup()
639 dst = stpcpy(npw->pw_gecos, pw->pw_gecos) + 1; in pw_dup()
641 if (pw->pw_dir != NULL) { in pw_dup()
642 npw->pw_dir = dst; in pw_dup()
643 dst = stpcpy(npw->pw_dir, pw->pw_dir) + 1; in pw_dup()
645 if (pw->pw_shell != NULL) { in pw_dup()
646 npw->pw_shell = dst; in pw_dup()
647 dst = stpcpy(npw->pw_shell, pw->pw_shell) + 1; in pw_dup()