00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 #if defined(LDAP_CASA_AUTH)
00058 #include "ldap_casa.h"
00059 #include "dhcpd.h"
00060
00061 int
00062 load_casa (void)
00063 {
00064 if( !(casaIDK = dlopen(MICASA_LIB,RTLD_LAZY)))
00065 return 0;
00066 p_miCASAGetCredential = (CASA_GetCredential_T) dlsym(casaIDK, "miCASAGetCredential");
00067 p_miCASASetCredential = (CASA_SetCredential_T) dlsym(casaIDK, "miCASASetCredential");
00068 p_miCASARemoveCredential = (CASA_RemoveCredential_T) dlsym(casaIDK, "miCASARemoveCredential");
00069
00070 if((p_miCASAGetCredential == NULL) ||
00071 (p_miCASASetCredential == NULL) ||
00072 (p_miCASARemoveCredential == NULL))
00073 {
00074 if(casaIDK)
00075 dlclose(casaIDK);
00076 casaIDK = NULL;
00077 p_miCASAGetCredential = NULL;
00078 p_miCASASetCredential = NULL;
00079 p_miCASARemoveCredential = NULL;
00080 return 0;
00081 }
00082 else
00083 return 1;
00084 }
00085
00086 static void
00087 release_casa(void)
00088 {
00089 if(casaIDK)
00090 {
00091 dlclose(casaIDK);
00092 casaIDK = NULL;
00093 }
00094
00095 p_miCASAGetCredential = NULL;
00096 p_miCASASetCredential = NULL;
00097 p_miCASARemoveCredential = NULL;
00098
00099 }
00100
00101 int
00102 load_uname_pwd_from_miCASA (char **ldap_username, char **ldap_password)
00103 {
00104 int result = 0;
00105 uint32_t credentialtype = SSCS_CRED_TYPE_SERVER_F;
00106 SSCS_BASIC_CREDENTIAL credential;
00107 SSCS_SECRET_ID_T applicationSecretId;
00108 char *tempVar = NULL;
00109
00110 const char applicationName[10] = "dhcp-ldap";
00111
00112 if ( load_casa() )
00113 {
00114 memset(&credential, 0, sizeof(SSCS_BASIC_CREDENTIAL));
00115 memset(&applicationSecretId, 0, sizeof(SSCS_SECRET_ID_T));
00116
00117 applicationSecretId.len = strlen(applicationName) + 1;
00118 memcpy (applicationSecretId.id, applicationName, applicationSecretId.len);
00119
00120 credential.unFlags = USERNAME_TYPE_CN_F;
00121
00122 result = p_miCASAGetCredential (0,
00123 &applicationSecretId,NULL,&credentialtype,
00124 &credential,NULL);
00125
00126 if(credential.unLen)
00127 {
00128 tempVar = dmalloc (credential.unLen + 1, MDL);
00129 if (!tempVar)
00130 log_fatal ("no memory for ldap_username");
00131 memcpy(tempVar , credential.username, credential.unLen);
00132 *ldap_username = tempVar;
00133
00134 tempVar = dmalloc (credential.pwordLen + 1, MDL);
00135 if (!tempVar)
00136 log_fatal ("no memory for ldap_password");
00137 memcpy(tempVar, credential.password, credential.pwordLen);
00138 *ldap_password = tempVar;
00139
00140 #if defined (DEBUG_LDAP)
00141 log_info ("Authentication credential taken from CASA");
00142 #endif
00143
00144 release_casa();
00145 return 1;
00146
00147 }
00148 else
00149 {
00150 release_casa();
00151 return 0;
00152 }
00153 }
00154 else
00155 return 0;
00156 }
00157
00158 #endif
00159