~vcs-imports/samba/main

« back to all changes in this revision

Viewing changes to testsuite/smbd/sec_ctx_stack.c

  • Committer: jerry
  • Date: 2006-07-14 21:48:39 UTC
  • Revision ID: vcs-imports@canonical.com-20060714214839-586d8c489a8fcead
gutting trunk to move to svn:externals

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
 
25
 
int 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
 
}