1284567Sgjb/* $NetBSD: mount_filecore.c,v 1.21 2020/07/26 08:20:22 mlelstv Exp $ */ 2284567Sgjb 3284567Sgjb/* 4284567Sgjb * Copyright (c) 1992, 1993, 1994 The Regents of the University of California. 5284567Sgjb * All rights reserved. 6284567Sgjb * 7284567Sgjb * This code is contains code contributed to the NetBSD project by 8284567Sgjb * Christopher G. Demetriou 9284567Sgjb * 10284567Sgjb * Redistribution and use in source and binary forms, with or without 11284567Sgjb * modification, are permitted provided that the following conditions 12284567Sgjb * are met: 13284567Sgjb * 1. Redistributions of source code must retain the above copyright 14284567Sgjb * notice, this list of conditions and the following disclaimer. 15284567Sgjb * 2. Redistributions in binary form must reproduce the above copyright 16284567Sgjb * notice, this list of conditions and the following disclaimer in the 17284567Sgjb * documentation and/or other materials provided with the distribution. 18284567Sgjb * 3. Neither the name of the University nor the names of its contributors 19284813Sgjb * may be used to endorse or promote products derived from this software 20285049Sgjb * without specific prior written permission. 21284567Sgjb * 22284567Sgjb * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23284567Sgjb * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24284567Sgjb * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25284567Sgjb * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26284567Sgjb * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27284567Sgjb * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28284567Sgjb * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29284567Sgjb * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30284567Sgjb * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31284567Sgjb * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32284567Sgjb * SUCH DAMAGE. 33284567Sgjb * 34284567Sgjb * mount_filecore.c 1.1 1998/6/26 35284567Sgjb */ 36284567Sgjb 37284567Sgjb/* 38284567Sgjb * Copyright (c) 1998 Andrew McMurry 39284567Sgjb * 40284567Sgjb * This code is contains code contributed to the NetBSD project by 41284567Sgjb * Christopher G. Demetriou 42284567Sgjb * 43284567Sgjb * Redistribution and use in source and binary forms, with or without 44284567Sgjb * modification, are permitted provided that the following conditions 45284567Sgjb * are met: 46284567Sgjb * 1. Redistributions of source code must retain the above copyright 47284567Sgjb * notice, this list of conditions and the following disclaimer. 48284567Sgjb * 2. Redistributions in binary form must reproduce the above copyright 49284567Sgjb * notice, this list of conditions and the following disclaimer in the 50284567Sgjb * documentation and/or other materials provided with the distribution. 51284567Sgjb * 3. All advertising materials mentioning features or use of this software 52284567Sgjb * must display the following acknowledgement: 53284567Sgjb * This product includes software developed by the University of 54 * California, Berkeley and its contributors. 55 * 4. Neither the name of the University nor the names of its contributors 56 * may be used to endorse or promote products derived from this software 57 * without specific prior written permission. 58 * 59 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 60 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 61 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 62 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 63 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 64 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 65 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 66 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 67 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 68 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 69 * SUCH DAMAGE. 70 * 71 * mount_filecore.c 1.1 1998/6/26 72 */ 73 74#include <sys/cdefs.h> 75#ifndef lint 76__COPYRIGHT("@(#) Copyright (c) 1992, 1993, 1994\ 77 The Regents of the University of California.\ 78 Copyright (c) 1998 Andrew McMurry. All rights reserved."); 79#endif /* not lint */ 80 81#include <sys/param.h> 82#include <sys/mount.h> 83 84#include <err.h> 85#include <grp.h> 86#include <pwd.h> 87#include <stdlib.h> 88#include <stdio.h> 89#include <string.h> 90#include <unistd.h> 91#include <util.h> 92 93#include <filecorefs/filecore_mount.h> 94 95#include <mntopts.h> 96 97#include "mountprog.h" 98 99static const struct mntopt mopts[] = { 100 MOPT_STDOPTS, 101 MOPT_UPDATE, 102 MOPT_GETARGS, 103 MOPT_NULL, 104}; 105 106int mount_filecore(int argc, char **argv); 107__dead static void usage(void); 108 109#ifndef MOUNT_NOMAIN 110int 111main(int argc, char **argv) 112{ 113 return mount_filecore(argc, argv); 114} 115#endif 116 117int 118mount_filecore(int argc, char **argv) 119{ 120 struct filecore_args args; 121 int ch, mntflags, opts, useuid; 122 char *dev, *dir, canon_dev[MAXPATHLEN], canon_dir[MAXPATHLEN]; 123 mntoptparse_t mp; 124 125 mntflags = opts = 0; 126 useuid = 1; 127 args.uid = 0; 128 args.gid = 0; 129 130 while ((ch = getopt(argc, argv, "anRfu:g:o:")) != -1) 131 switch (ch) { 132 case 'a': 133 args.flags |= FILECOREMNT_ALLACCESS; 134 break; 135 case 'n': 136 args.flags |= FILECOREMNT_OWNACCESS; 137 break; 138 case 'R': 139 args.flags |= FILECOREMNT_OWNREAD; 140 break; 141 case 'f': 142 args.flags |= FILECOREMNT_FILETYPE; 143 break; 144 case 'u': 145 args.uid = a_uid(optarg); 146 useuid = 0; 147 break; 148 case 'g': 149 args.gid = a_gid(optarg); 150 useuid = 0; 151 break; 152 case 'o': 153 mp = getmntopts(optarg, mopts, &mntflags, 0); 154 if (mp == NULL) 155 err(1, "getmntopts"); 156 freemntopts(mp); 157 break; 158 case '?': 159 default: 160 usage(); 161 } 162 argc -= optind; 163 argv += optind; 164 165 if (argc != 2) 166 usage(); 167 168 pathadj(argv[0], canon_dev); 169 dev = canon_dev; 170 171 pathadj(argv[0], canon_dir); 172 dir = canon_dir; 173 174#define DEFAULT_ROOTUID -2 175 /* 176 * FILECORE filesystems are not writable. 177 */ 178 mntflags |= MNT_RDONLY; 179 if (useuid) args.flags |= FILECOREMNT_USEUID; 180 args.fspec = dev; 181 args.flags = opts; 182 183 if (mount(MOUNT_FILECORE, dir, mntflags, &args, sizeof args) == -1) 184 err(1, "%s on %s", dev, dir); 185 if (mntflags & MNT_GETARGS) { 186 char buf[1024]; 187 (void)snprintb(buf, sizeof(buf), FILECOREMNT_BITS, args.flags); 188 printf("uid=%d, gid=%d, flags=%s\n", args.uid, args.gid, buf); 189 } 190 exit(0); 191} 192 193static void 194usage(void) 195{ 196 (void)fprintf(stderr, 197 "usage: mount_filecore [-afnR] [-g gid] [-o options] [-u uid] special node\n"); 198 exit(1); 199} 200