]> arthur.barton.de Git - netatalk.git/blob - bin/misc/uuidtest.c
0efc3318c6a45d0fe25c85b3cdf5016b9c548789
[netatalk.git] / bin / misc / uuidtest.c
1 /*
2   Copyright (c) 2008,2009 Frank Lahm <franklahm@gmail.com>
3
4   This program is free software; you can redistribute it and/or modify
5   it under the terms of the GNU General Public License as published by
6   the Free Software Foundation; either version 2 of the License, or
7   (at your option) any later version.
8
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13 */
14
15 #ifdef HAVE_CONFIG_H
16 #include "config.h"
17 #endif /* HAVE_CONFIG_H */
18
19 #include <unistd.h>
20 #include <stdlib.h>
21 #include <stdio.h>
22 #include <string.h>
23 #include <stdarg.h>
24
25 #ifdef HAVE_LDAP
26 #define LDAP_DEPRECATED 1
27 #include <ldap.h>
28 #endif
29
30 #include <atalk/ldapconfig.h>
31 #include <atalk/uuid.h>
32 #include <atalk/logger.h>
33
34 #define STRNCMP(a, R, b, l) (strncmp(a,b,l) R 0)
35
36 static void usage()
37 {
38     printf("Usage: afpldaptest -u <user> | -g <group> | -i <UUID>\n");
39 }
40
41 static void parse_ldapconf()
42 {
43     static int inited = 0;
44
45     if (! inited) {
46 #ifdef HAVE_LDAP
47         /* Parse afp_ldap.conf */
48         printf("Start parsing afp_ldap.conf\n");
49         acl_ldap_readconfig(_PATH_ACL_LDAPCONF);
50         printf("Finished parsing afp_ldap.conf\n");
51         if (ldap_config_valid) {
52             if (ldap_auth_method == LDAP_AUTH_NONE)
53                 printf("afp_ldap.conf is ok. Using anonymous bind.\n");
54             else if (ldap_auth_method == LDAP_AUTH_SIMPLE)
55                 printf("afp_ldap.conf is ok. Using simple bind.\n");
56             else {
57                 ldap_config_valid = 0;
58                 printf("afp_ldap.conf wants SASL which is not yet supported.\n");
59                 exit(EXIT_FAILURE);
60             }
61         } else {
62             printf("afp_ldap.conf is not ok, not using LDAP. Only local UUID testing available.\n");
63         }
64 #else
65         printf("Built without LDAP support, only local UUID testing available.\n");
66 #endif
67         inited = 1;
68     }
69 }
70
71 int main( int argc, char **argv)
72 {
73     int ret, c;
74     int verbose = 0;
75     atalk_uuid_t uuid;
76     int logsetup = 0;
77     uuidtype_t type;
78     char *name = NULL;
79
80     while ((c = getopt(argc, argv, ":vu:g:i:")) != -1) {
81         switch(c) {
82
83         case 'v':
84             if (! verbose) {
85                 verbose = 1;
86                 setuplog("default log_maxdebug /dev/tty");
87                 logsetup = 1;
88             }
89             break;
90
91         case 'u':
92             if (! logsetup)
93                 setuplog("default log_info /dev/tty");
94             parse_ldapconf();
95             printf("Searching user: %s\n", optarg);
96             ret = getuuidfromname( optarg, UUID_USER, uuid);
97             if (ret == 0) {
98                 printf("User: %s ==> UUID: %s\n", optarg, uuid_bin2string(uuid));
99             } else {
100                 printf("User %s not found.\n", optarg);
101             }
102             break;
103
104         case 'g':
105             if (! logsetup)
106                 setuplog("default log_info /dev/tty");
107             parse_ldapconf();
108             printf("Searching group: %s\n", optarg);
109             ret = getuuidfromname( optarg, UUID_GROUP, uuid);
110             if (ret == 0) {
111                 printf("Group: %s ==> UUID: %s\n", optarg, uuid_bin2string(uuid));
112             } else {
113                 printf("Group %s not found.\n", optarg);
114             }
115             break;
116
117         case 'i':
118             if (! logsetup)
119                 setuplog("default log_info /dev/tty");
120             parse_ldapconf();
121             printf("Searching uuid: %s\n", optarg);
122             uuid_string2bin(optarg, uuid);
123             ret = getnamefromuuid( uuid, &name, &type);
124             if (ret == 0) {
125                 switch (type) {
126                 case UUID_USER:
127                     printf("UUID: %s ==> User: %s\n", optarg, name);
128                     break;
129                 case UUID_GROUP:
130                     printf("UUID: %s ==> Group: %s\n", optarg, name);
131                     break;
132                 default:
133                     printf("???: %s\n", optarg);
134                     break;
135                 }
136                 free(name);
137             } else {
138                 printf("UUID: %s not found.\n", optarg);
139             }
140             break;
141
142         case ':':
143         case '?':
144         case 'h':
145             usage();
146             exit(EXIT_FAILURE);
147         }
148     }
149
150     return 0;
151 }
152