1 #include <sys/types.h>
2 #include <stdlib.h>
3 #include <ctype.h>
4 #include <string.h>
5 
6 #include <bglibs/sysdeps.h>
7 
8 #include "module.h"
9 #include "v2client.h"
10 
11 const char program[] = "cvm-chain";
12 
13 const char* chains[10];
14 int chain_count;
15 
cvm_chain_init()16 static void cvm_chain_init()
17 {
18   cvm_fact_username = 0;
19   cvm_fact_userid = -1;
20   cvm_fact_groupid = -1;
21   cvm_fact_directory = 0;
22   cvm_fact_shell = 0;
23   cvm_fact_realname = 0;
24   cvm_fact_groupname = 0;
25   cvm_fact_sys_username = 0;
26   cvm_fact_sys_directory = 0;
27   cvm_fact_domain = 0;
28   cvm_fact_mailbox = 0;
29 }
30 
cvm_module_init(void)31 int cvm_module_init(void)
32 {
33   int i;
34   char varname[] = "CVM_CHAIN#";
35 
36   chain_count = 0;
37   for (i = 0; i <= 9; ++i) {
38     varname[9] = i + '0';
39     if ((chains[chain_count] = getenv(varname)) != 0)
40       ++chain_count;
41   }
42   if (chain_count == 0)
43     return CVME_CONFIG | CVME_FATAL;
44 
45   cvm_chain_init();
46   return 0;
47 }
48 
cvm_module_lookup(void)49 int cvm_module_lookup(void)
50 {
51   int i;
52   int credcount;
53   int code;
54   unsigned long outofscope = 1;
55   int saw_outofscope = 0;
56   struct cvm_credential creds[CVM_CRED_MAX+1];
57 
58   for (i = credcount = 0; i <= CVM_CRED_MAX; ++i) {
59     if (cvm_module_credentials[i].len > 0) {
60       creds[credcount].type = i;
61       creds[credcount].value = cvm_module_credentials[i];
62       ++credcount;
63     }
64   }
65 
66   for (code = i = 0; i < chain_count && ((code & CVME_FATAL) == 0); i++) {
67     cvm_chain_init();
68     code = cvm_client_authenticate(chains[i], credcount, creds);
69     if (code != CVME_PERMFAIL)
70       return code;
71     if (outofscope
72 	&& cvm_client_fact_uint(CVM_FACT_OUTOFSCOPE, &outofscope) == 0)
73       saw_outofscope = 1;
74   }
75   if (saw_outofscope)
76     cvm_module_fact_uint(CVM_FACT_OUTOFSCOPE, outofscope);
77   return code;
78 }
79 
cvm_module_authenticate(void)80 int cvm_module_authenticate(void)
81 {
82   return 0;
83 }
84 
cvm_module_results(void)85 int cvm_module_results(void)
86 {
87   cvm_client_setenv();
88   return 0;
89 }
90 
91 
cvm_module_stop(void)92 void cvm_module_stop(void)
93 {
94 }
95