bsm_fcntl.c revision 191273
1203954Srdivacky/*- 2203954Srdivacky * Copyright (c) 2008-2009 Apple Inc. 3203954Srdivacky * All rights reserved. 4203954Srdivacky * 5203954Srdivacky * Redistribution and use in source and binary forms, with or without 6203954Srdivacky * modification, are permitted provided that the following conditions 7203954Srdivacky * are met: 8203954Srdivacky * 1. Redistributions of source code must retain the above copyright 9203954Srdivacky * notice, this list of conditions and the following disclaimer. 10203954Srdivacky * 2. Redistributions in binary form must reproduce the above copyright 11203954Srdivacky * notice, this list of conditions and the following disclaimer in the 12203954Srdivacky * documentation and/or other materials provided with the distribution. 13203954Srdivacky * 3. Neither the name of Apple Inc. ("Apple") nor the names of 14203954Srdivacky * its contributors may be used to endorse or promote products derived 15203954Srdivacky * from this software without specific prior written permission. 16203954Srdivacky * 17203954Srdivacky * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND 18203954Srdivacky * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19203954Srdivacky * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20203954Srdivacky * ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR 21203954Srdivacky * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22203954Srdivacky * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23203954Srdivacky * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24203954Srdivacky * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 25203954Srdivacky * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 26203954Srdivacky * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27203954Srdivacky * POSSIBILITY OF SUCH DAMAGE. 28203954Srdivacky * 29203954Srdivacky * $P4: //depot/projects/trustedbsd/openbsm/libbsm/bsm_fcntl.c#2 $ 30203954Srdivacky */ 31203954Srdivacky 32203954Srdivacky#include <sys/param.h> 33203954Srdivacky#include <sys/fcntl.h> 34203954Srdivacky 35203954Srdivacky#include <config/config.h> 36203954Srdivacky 37203954Srdivacky#include <bsm/audit_fcntl.h> 38203954Srdivacky#include <bsm/libbsm.h> 39203954Srdivacky 40203954Srdivackystruct bsm_fcntl_cmd { 41203954Srdivacky u_short bfc_bsm_fcntl_cmd; 42203954Srdivacky int bfc_local_fcntl_cmd; 43203954Srdivacky}; 44203954Srdivackytypedef struct bsm_fcntl_cmd bsm_fcntl_cmd_t; 45203954Srdivacky 46203954Srdivackystatic const bsm_fcntl_cmd_t bsm_fcntl_cmdtab[] = { 47203954Srdivacky { BSM_F_DUPFD, F_DUPFD }, 48203954Srdivacky { BSM_F_GETFD, F_GETFD }, 49203954Srdivacky { BSM_F_SETFD, F_SETFD }, 50203954Srdivacky { BSM_F_GETFL, F_GETFL }, 51203954Srdivacky { BSM_F_SETFL, F_SETFL }, 52203954Srdivacky#ifdef F_O_GETLK 53203954Srdivacky { BSM_F_O_GETLK, F_O_GETLK }, 54203954Srdivacky#endif 55203954Srdivacky { BSM_F_SETLK, F_SETLK }, 56203954Srdivacky { BSM_F_SETLKW, F_SETLK }, 57203954Srdivacky#ifdef F_CHFL 58203954Srdivacky { BSM_F_CHKFL, F_CHKFL }, 59203954Srdivacky#endif 60203954Srdivacky#ifdef F_DUP2FD 61203954Srdivacky { BSM_F_DUP2FD, F_DUP2FD }, 62203954Srdivacky#endif 63203954Srdivacky#ifdef F_ALLOCSP 64203954Srdivacky { BSM_F_ALLOCSP, F_ALLOCSP }, 65203954Srdivacky#endif 66203954Srdivacky#ifdef F_FREESP 67203954Srdivacky { BSM_F_FREESP, F_FREESP }, 68203954Srdivacky#endif 69203954Srdivacky#ifdef F_ISSTREAM 70203954Srdivacky { BSM_F_ISSTREAM, F_ISSTREAM}, 71203954Srdivacky#endif 72203954Srdivacky { BSM_F_GETLK, F_GETLK }, 73203954Srdivacky#ifdef F_PRIV 74203954Srdivacky { BSM_F_PRIV, F_PRIV }, 75203954Srdivacky#endif 76203954Srdivacky#ifdef F_NPRIV 77203954Srdivacky { BSM_F_NPRIV, F_NPRIV }, 78203954Srdivacky#endif 79203954Srdivacky#ifdef F_QUOTACTL 80203954Srdivacky { BSM_F_QUOTACTL, F_QUOTACTL }, 81203954Srdivacky#endif 82203954Srdivacky#ifdef F_BLOCKS 83203954Srdivacky { BSM_F_BLOCKS, F_BLOCKS }, 84203954Srdivacky#endif 85203954Srdivacky#ifdef F_BLKSIZE 86203954Srdivacky { BSM_F_BLKSIZE, F_BLKSIZE }, 87203954Srdivacky#endif 88203954Srdivacky { BSM_F_GETOWN, F_GETOWN }, 89203954Srdivacky { BSM_F_SETOWN, F_SETOWN }, 90203954Srdivacky#ifdef F_REVOKE 91203954Srdivacky { BSM_F_REVOKE, F_REVOKE }, 92203954Srdivacky#endif 93203954Srdivacky#ifdef F_HASREMOTEBLOCKS 94203954Srdivacky { BSM_F_HASREMOTEBLOCKS, 95203954Srdivacky F_HASREMOTEBLOCKS }, 96203954Srdivacky#endif 97203954Srdivacky#ifdef F_FREESP 98203954Srdivacky { BSM_F_FREESP, F_FREESP }, 99203954Srdivacky#endif 100203954Srdivacky#ifdef F_ALLOCSP 101203954Srdivacky { BSM_F_ALLOCSP, F_ALLOCSP }, 102203954Srdivacky#endif 103203954Srdivacky#ifdef F_FREESP64 104203954Srdivacky { BSM_F_FREESP64, F_FREESP64 }, 105203954Srdivacky#endif 106203954Srdivacky#ifdef F_ALLOCSP64 107203954Srdivacky { BSM_F_ALLOCSP64, F_ALLOCSP64 }, 108203954Srdivacky#endif 109203954Srdivacky#ifdef F_GETLK64 110203954Srdivacky { BSM_F_GETLK64, F_GETLK64 }, 111203954Srdivacky#endif 112203954Srdivacky#ifdef F_SETLK64 113203954Srdivacky { BSM_F_SETLK64, F_SETLK64 }, 114203954Srdivacky#endif 115203954Srdivacky#ifdef F_SETLKW64 116203954Srdivacky { BSM_F_SETLKW64, F_SETLKW64 }, 117203954Srdivacky#endif 118203954Srdivacky#ifdef F_SHARE 119203954Srdivacky { BSM_F_SHARE, F_SHARE }, 120203954Srdivacky#endif 121203954Srdivacky#ifdef F_UNSHARE 122203954Srdivacky { BSM_F_UNSHARE, F_UNSHARE }, 123203954Srdivacky#endif 124203954Srdivacky#ifdef F_SETLK_NBMAND 125203954Srdivacky { BSM_F_SETLK_NBMAND, F_SETLK_NBMAND }, 126203954Srdivacky#endif 127203954Srdivacky#ifdef F_SHARE_NBMAND 128203954Srdivacky { BSM_F_SHARE_NBMAND, F_SHARE_NBMAND }, 129203954Srdivacky#endif 130203954Srdivacky#ifdef F_SETLK64_NBMAND 131203954Srdivacky { BSM_F_SETLK64_NBMAND, F_SETLK64_NBMAND }, 132203954Srdivacky#endif 133203954Srdivacky#ifdef F_GETXFL 134203954Srdivacky { BSM_F_GETXFL, F_GETXFL }, 135203954Srdivacky#endif 136203954Srdivacky#ifdef F_BADFD 137203954Srdivacky { BSM_F_BADFD, F_BADFD }, 138203954Srdivacky#endif 139203954Srdivacky#ifdef F_OGETLK 140203954Srdivacky { BSM_F_OGETLK, F_OGETLK }, 141203954Srdivacky#endif 142203954Srdivacky#ifdef F_OSETLK 143203954Srdivacky { BSM_F_OSETLK, F_OSETLK }, 144203954Srdivacky#endif 145203954Srdivacky#ifdef F_OSETLKW 146203954Srdivacky { BSM_F_OSETLKW, F_OSETLKW }, 147203954Srdivacky#endif 148203954Srdivacky#ifdef F_SETLK_REMOTE 149203954Srdivacky { BSM_F_SETLK_REMOTE, F_SETLK_REMOTE }, 150203954Srdivacky#endif 151203954Srdivacky 152203954Srdivacky#ifdef F_SETSIG 153203954Srdivacky { BSM_F_SETSIG, F_SETSIG }, 154203954Srdivacky#endif 155203954Srdivacky#ifdef F_GETSIG 156203954Srdivacky { BSM_F_GETSIG, F_GETSIG }, 157203954Srdivacky#endif 158203954Srdivacky 159203954Srdivacky#ifdef F_CHKCLEAN 160203954Srdivacky { BSM_F_CHKCLEAN, F_CHKCLEAN }, 161203954Srdivacky#endif 162203954Srdivacky#ifdef F_PREALLOCATE 163203954Srdivacky { BSM_F_PREALLOCATE, F_PREALLOCATE }, 164203954Srdivacky#endif 165203954Srdivacky#ifdef F_SETSIZE 166203954Srdivacky { BSM_F_SETSIZE, F_SETSIZE }, 167203954Srdivacky#endif 168203954Srdivacky#ifdef F_RDADVISE 169203954Srdivacky { BSM_F_RDADVISE, F_RDADVISE }, 170203954Srdivacky#endif 171203954Srdivacky#ifdef F_RDAHEAD 172203954Srdivacky { BSM_F_RDAHEAD, F_RDAHEAD }, 173203954Srdivacky#endif 174203954Srdivacky#ifdef F_READBOOTSTRAP 175203954Srdivacky { BSM_F_READBOOTSTRAP, F_READBOOTSTRAP }, 176203954Srdivacky#endif 177203954Srdivacky#ifdef F_WRITEBOOTSTRAP 178203954Srdivacky { BSM_F_WRITEBOOTSTRAP, F_WRITEBOOTSTRAP }, 179203954Srdivacky#endif 180203954Srdivacky#ifdef F_NOCACHE 181203954Srdivacky { BSM_F_NOCACHE, F_NOCACHE }, 182203954Srdivacky#endif 183203954Srdivacky#ifdef F_LOG2PHYS 184203954Srdivacky { BSM_F_LOG2PHYS, F_LOG2PHYS }, 185203954Srdivacky#endif 186203954Srdivacky#ifdef F_GETPATH 187203954Srdivacky { BSM_F_GETPATH, F_GETPATH }, 188203954Srdivacky#endif 189203954Srdivacky#ifdef F_FULLFSYNC 190203954Srdivacky { BSM_F_FULLFSYNC, F_FULLFSYNC }, 191203954Srdivacky#endif 192203954Srdivacky#ifdef F_PATHPKG_CHECK 193203954Srdivacky { BSM_F_PATHPKG_CHECK, F_PATHPKG_CHECK }, 194203954Srdivacky#endif 195203954Srdivacky#ifdef F_FREEZE_FS 196203954Srdivacky { BSM_F_FREEZE_FS, F_FREEZE_FS }, 197203954Srdivacky#endif 198203954Srdivacky#ifdef F_THAW_FS 199203954Srdivacky { BSM_F_THAW_FS, F_THAW_FS }, 200203954Srdivacky#endif 201203954Srdivacky#ifdef F_GLOBAL_NOCACHE 202203954Srdivacky { BSM_F_GLOBAL_NOCACHE, F_GLOBAL_NOCACHE }, 203203954Srdivacky#endif 204203954Srdivacky#ifdef F_OPENFROM 205203954Srdivacky { BSM_F_OPENFROM, F_OPENFROM }, 206203954Srdivacky#endif 207203954Srdivacky#ifdef F_UNLINKFROM 208203954Srdivacky { BSM_F_UNLINKFROM, F_UNLINKFROM }, 209203954Srdivacky#endif 210203954Srdivacky#ifdef F_CHECK_OPENEVT 211203954Srdivacky { BSM_F_CHECK_OPENEVT, F_CHECK_OPENEVT }, 212203954Srdivacky#endif 213203954Srdivacky#ifdef F_ADDSIGS 214203954Srdivacky { BSM_F_ADDSIGS, F_ADDSIGS }, 215203954Srdivacky#endif 216203954Srdivacky#ifdef F_MARKDEPENDENCY 217203954Srdivacky { BSM_F_MARKDEPENDENCY, F_MARKDEPENDENCY }, 218203954Srdivacky#endif 219203954Srdivacky 220203954Srdivacky#ifdef FCNTL_FS_SPECIFIC_BASE 221203954Srdivacky { BSM_F_FS_SPECIFIC_0, FCNTL_FS_SPECIFIC_BASE}, 222203954Srdivacky { BSM_F_FS_SPECIFIC_1, FCNTL_FS_SPECIFIC_BASE + 1}, 223203954Srdivacky { BSM_F_FS_SPECIFIC_2, FCNTL_FS_SPECIFIC_BASE + 2}, 224203954Srdivacky { BSM_F_FS_SPECIFIC_3, FCNTL_FS_SPECIFIC_BASE + 3}, 225203954Srdivacky { BSM_F_FS_SPECIFIC_4, FCNTL_FS_SPECIFIC_BASE + 4}, 226203954Srdivacky { BSM_F_FS_SPECIFIC_5, FCNTL_FS_SPECIFIC_BASE + 5}, 227203954Srdivacky { BSM_F_FS_SPECIFIC_6, FCNTL_FS_SPECIFIC_BASE + 6}, 228203954Srdivacky { BSM_F_FS_SPECIFIC_7, FCNTL_FS_SPECIFIC_BASE + 7}, 229203954Srdivacky { BSM_F_FS_SPECIFIC_8, FCNTL_FS_SPECIFIC_BASE + 8}, 230203954Srdivacky { BSM_F_FS_SPECIFIC_9, FCNTL_FS_SPECIFIC_BASE + 9}, 231203954Srdivacky { BSM_F_FS_SPECIFIC_10, FCNTL_FS_SPECIFIC_BASE + 10}, 232203954Srdivacky { BSM_F_FS_SPECIFIC_11, FCNTL_FS_SPECIFIC_BASE + 11}, 233203954Srdivacky { BSM_F_FS_SPECIFIC_12, FCNTL_FS_SPECIFIC_BASE + 12}, 234203954Srdivacky { BSM_F_FS_SPECIFIC_13, FCNTL_FS_SPECIFIC_BASE + 13}, 235203954Srdivacky { BSM_F_FS_SPECIFIC_14, FCNTL_FS_SPECIFIC_BASE + 14}, 236203954Srdivacky { BSM_F_FS_SPECIFIC_15, FCNTL_FS_SPECIFIC_BASE + 15}, 237203954Srdivacky#endif /* FCNTL_FS_SPECIFIC_BASE */ 238203954Srdivacky}; 239203954Srdivackystatic const int bsm_fcntl_cmd_count = sizeof(bsm_fcntl_cmdtab) / 240203954Srdivacky sizeof(bsm_fcntl_cmdtab[0]); 241203954Srdivacky 242203954Srdivackystatic const bsm_fcntl_cmd_t * 243203954Srdivackybsm_lookup_local_fcntl_cmd(int local_fcntl_cmd) 244203954Srdivacky{ 245203954Srdivacky int i; 246203954Srdivacky 247203954Srdivacky for (i = 0; i < bsm_fcntl_cmd_count; i++) { 248203954Srdivacky if (bsm_fcntl_cmdtab[i].bfc_local_fcntl_cmd == 249203954Srdivacky local_fcntl_cmd) 250203954Srdivacky return (&bsm_fcntl_cmdtab[i]); 251203954Srdivacky } 252203954Srdivacky return (NULL); 253203954Srdivacky} 254203954Srdivacky 255203954Srdivackyu_short 256203954Srdivackyau_fcntl_cmd_to_bsm(int local_fcntl_cmd) 257203954Srdivacky{ 258203954Srdivacky const bsm_fcntl_cmd_t *bfcp; 259203954Srdivacky 260203954Srdivacky bfcp = bsm_lookup_local_fcntl_cmd(local_fcntl_cmd); 261203954Srdivacky if (bfcp == NULL) 262203954Srdivacky return (BSM_F_UNKNOWN); 263203954Srdivacky return (bfcp->bfc_bsm_fcntl_cmd); 264203954Srdivacky} 265203954Srdivacky 266203954Srdivackystatic const bsm_fcntl_cmd_t * 267203954Srdivackybsm_lookup_bsm_fcntl_cmd(u_short bsm_fcntl_cmd) 268203954Srdivacky{ 269203954Srdivacky int i; 270203954Srdivacky 271203954Srdivacky for (i = 0; i < bsm_fcntl_cmd_count; i++) { 272203954Srdivacky if (bsm_fcntl_cmdtab[i].bfc_bsm_fcntl_cmd == 273203954Srdivacky bsm_fcntl_cmd) 274203954Srdivacky return (&bsm_fcntl_cmdtab[i]); 275203954Srdivacky } 276203954Srdivacky return (NULL); 277203954Srdivacky} 278203954Srdivacky 279203954Srdivackyint 280203954Srdivackyau_bsm_to_fcntl_cmd(u_short bsm_fcntl_cmd, int *local_fcntl_cmdp) 281203954Srdivacky{ 282203954Srdivacky const bsm_fcntl_cmd_t *bfcp; 283203954Srdivacky 284203954Srdivacky bfcp = bsm_lookup_bsm_fcntl_cmd(bsm_fcntl_cmd); 285203954Srdivacky if (bfcp == NULL || bfcp->bfc_local_fcntl_cmd) 286203954Srdivacky return (-1); 287203954Srdivacky *local_fcntl_cmdp = bfcp->bfc_local_fcntl_cmd; 288203954Srdivacky return (0); 289203954Srdivacky} 290203954Srdivacky