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()16static 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)31int 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)49int 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)80int cvm_module_authenticate(void) 81 { 82 return 0; 83 } 84 cvm_module_results(void)85int cvm_module_results(void) 86 { 87 cvm_client_setenv(); 88 return 0; 89 } 90 91 cvm_module_stop(void)92void cvm_module_stop(void) 93 { 94 } 95