1*d2d022b9SBaptiste Daroussin /*- 2*d2d022b9SBaptiste Daroussin * Copyright (C) 2015 Baptiste Daroussin <bapt@FreeBSD.org> 3*d2d022b9SBaptiste Daroussin * All rights reserved. 4*d2d022b9SBaptiste Daroussin * 5*d2d022b9SBaptiste Daroussin * Redistribution and use in source and binary forms, with or without 6*d2d022b9SBaptiste Daroussin * modification, are permitted provided that the following conditions 7*d2d022b9SBaptiste Daroussin * are met: 8*d2d022b9SBaptiste Daroussin * 1. Redistributions of source code must retain the above copyright 9*d2d022b9SBaptiste Daroussin * notice, this list of conditions and the following disclaimer 10*d2d022b9SBaptiste Daroussin * in this position and unchanged. 11*d2d022b9SBaptiste Daroussin * 2. Redistributions in binary form must reproduce the above copyright 12*d2d022b9SBaptiste Daroussin * notice, this list of conditions and the following disclaimer in the 13*d2d022b9SBaptiste Daroussin * documentation and/or other materials provided with the distribution. 14*d2d022b9SBaptiste Daroussin * 15*d2d022b9SBaptiste Daroussin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 16*d2d022b9SBaptiste Daroussin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17*d2d022b9SBaptiste Daroussin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18*d2d022b9SBaptiste Daroussin * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 19*d2d022b9SBaptiste Daroussin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20*d2d022b9SBaptiste Daroussin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21*d2d022b9SBaptiste Daroussin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22*d2d022b9SBaptiste Daroussin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23*d2d022b9SBaptiste Daroussin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24*d2d022b9SBaptiste Daroussin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25*d2d022b9SBaptiste Daroussin */ 26*d2d022b9SBaptiste Daroussin 27*d2d022b9SBaptiste Daroussin #include <sys/cdefs.h> 28*d2d022b9SBaptiste Daroussin __FBSDID("$FreeBSD$"); 29*d2d022b9SBaptiste Daroussin 30*d2d022b9SBaptiste Daroussin #include <sys/types.h> 31*d2d022b9SBaptiste Daroussin #include <sys/wait.h> 32*d2d022b9SBaptiste Daroussin 33*d2d022b9SBaptiste Daroussin #include <err.h> 34*d2d022b9SBaptiste Daroussin #include <inttypes.h> 35*d2d022b9SBaptiste Daroussin #include <sysexits.h> 36*d2d022b9SBaptiste Daroussin #include <limits.h> 37*d2d022b9SBaptiste Daroussin #include <stdlib.h> 38*d2d022b9SBaptiste Daroussin 39*d2d022b9SBaptiste Daroussin #include "pw.h" 40*d2d022b9SBaptiste Daroussin 41*d2d022b9SBaptiste Daroussin int 42*d2d022b9SBaptiste Daroussin pw_checkfd(char *nptr) 43*d2d022b9SBaptiste Daroussin { 44*d2d022b9SBaptiste Daroussin const char *errstr; 45*d2d022b9SBaptiste Daroussin int fd = -1; 46*d2d022b9SBaptiste Daroussin 47*d2d022b9SBaptiste Daroussin if (strcmp(nptr, "-") == 0) 48*d2d022b9SBaptiste Daroussin return '-'; 49*d2d022b9SBaptiste Daroussin fd = strtonum(nptr, 0, INT_MAX, &errstr); 50*d2d022b9SBaptiste Daroussin if (errstr != NULL) 51*d2d022b9SBaptiste Daroussin errx(EX_USAGE, "Bad file descriptor '%s': %s", 52*d2d022b9SBaptiste Daroussin nptr, errstr); 53*d2d022b9SBaptiste Daroussin return (fd); 54*d2d022b9SBaptiste Daroussin } 55*d2d022b9SBaptiste Daroussin 56*d2d022b9SBaptiste Daroussin uintmax_t 57*d2d022b9SBaptiste Daroussin pw_checkid(char *nptr, uintmax_t maxval) 58*d2d022b9SBaptiste Daroussin { 59*d2d022b9SBaptiste Daroussin const char *errstr = NULL; 60*d2d022b9SBaptiste Daroussin uintmax_t id; 61*d2d022b9SBaptiste Daroussin 62*d2d022b9SBaptiste Daroussin id = strtounum(nptr, 0, maxval, &errstr); 63*d2d022b9SBaptiste Daroussin if (errstr) 64*d2d022b9SBaptiste Daroussin errx(EX_USAGE, "Bad id '%s': %s", nptr, errstr); 65*d2d022b9SBaptiste Daroussin return (id); 66*d2d022b9SBaptiste Daroussin } 67*d2d022b9SBaptiste Daroussin 68*d2d022b9SBaptiste Daroussin struct userconf * 69*d2d022b9SBaptiste Daroussin get_userconfig(const char *config) 70*d2d022b9SBaptiste Daroussin { 71*d2d022b9SBaptiste Daroussin char defaultcfg[MAXPATHLEN]; 72*d2d022b9SBaptiste Daroussin 73*d2d022b9SBaptiste Daroussin if (config != NULL) 74*d2d022b9SBaptiste Daroussin return (read_userconfig(config)); 75*d2d022b9SBaptiste Daroussin snprintf(defaultcfg, sizeof(defaultcfg), "%s/pw.conf", conf.etcpath); 76*d2d022b9SBaptiste Daroussin return (read_userconfig(defaultcfg)); 77*d2d022b9SBaptiste Daroussin } 78*d2d022b9SBaptiste Daroussin 79*d2d022b9SBaptiste Daroussin int 80*d2d022b9SBaptiste Daroussin nis_update(void) { 81*d2d022b9SBaptiste Daroussin pid_t pid; 82*d2d022b9SBaptiste Daroussin int i; 83*d2d022b9SBaptiste Daroussin 84*d2d022b9SBaptiste Daroussin fflush(NULL); 85*d2d022b9SBaptiste Daroussin if ((pid = fork()) == -1) { 86*d2d022b9SBaptiste Daroussin warn("fork()"); 87*d2d022b9SBaptiste Daroussin return (1); 88*d2d022b9SBaptiste Daroussin } 89*d2d022b9SBaptiste Daroussin if (pid == 0) { 90*d2d022b9SBaptiste Daroussin execlp("/usr/bin/make", "make", "-C", "/var/yp/", (char*) NULL); 91*d2d022b9SBaptiste Daroussin _exit(1); 92*d2d022b9SBaptiste Daroussin } 93*d2d022b9SBaptiste Daroussin waitpid(pid, &i, 0); 94*d2d022b9SBaptiste Daroussin if ((i = WEXITSTATUS(i)) != 0) 95*d2d022b9SBaptiste Daroussin errx(i, "make exited with status %d", i); 96*d2d022b9SBaptiste Daroussin return (i); 97*d2d022b9SBaptiste Daroussin } 98