1/* 2 Unix SMB/Netbios implementation. 3 Version 1.9. 4 Security context tests 5 Copyright (C) Tim Potter 2000 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 2 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program; if not, write to the Free Software 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20*/ 21 22#include "includes.h" 23#include "sec_ctx_utils.h" 24 25int main (int argc, char **argv) 26{ 27 BOOL result; 28 int i; 29 30 init_sec_ctx(); 31 32 /* Push a whole bunch of security contexts */ 33 34 for (i = 0; i < MAX_SEC_CTX_DEPTH; i++) { 35 36 result = push_sec_ctx(); 37 set_sec_ctx(i + 1, i + 2, 0, NULL); 38 39 if (!result) { 40 printf("FAIL: push_sec_ctx(%d)\n", i); 41 return 1; 42 } 43 44 printf("pushed context (%d, %d) eff=(%d, %d)\n", 45 getuid(), getgid(), geteuid(), getegid()); 46 47 if ((geteuid() != i + 1) || (getegid() != i + 2)) { 48 printf("FAIL: incorrect context pushed\n"); 49 return 1; 50 } 51 } 52 53 /* Pop them all off */ 54 55 for (i = MAX_SEC_CTX_DEPTH; i > 0; i--) { 56 57 result = pop_sec_ctx(); 58 59 if (!result) { 60 printf("FAIL: pop_sec_ctx(%d)\n", i); 61 return 1; 62 } 63 64 printf("popped context (%d, %d) eff=(%d, %d)\n", 65 getuid(), getgid(), geteuid(), getegid()); 66 67 printf("i = %d\n",i); 68 69 if (i > 1) { 70 if ((geteuid() != i - 1) || (getegid() != i)) { 71 printf("FAIL: incorrect context popped\n"); 72 return 1; 73 } 74 } else { 75 if ((geteuid() != 0) || (getegid() != 0)) { 76 printf("FAIL: incorrect context popped\n"); 77 return 1; 78 } 79 } 80 } 81 82 /* Everything's cool */ 83 84 printf("PASS\n"); 85 return 0; 86} 87