44 : env_Hash(8,13), secEntity(secent)
46 char *vdp, varsave, *varname, *varvalu;
48 if (!vardata) {global_env = 0; global_len = 0;
return;}
52 if (!varlen) varlen = strlen(vardata);
56 while(*vardata ==
'&' && varlen) {vardata++; varlen--;}
57 if (!varlen) {global_env = 0; global_len = 0;
return;}
58 global_env = (
char *)malloc(varlen+2);
59 *global_env =
'&'; vdp = global_env+1;
60 memcpy((
void *)vdp, (
const void *)vardata, (
size_t)varlen);
61 *(vdp+varlen) =
'\0'; global_len = varlen+1;
66 {
while(*vdp ==
'&') vdp++;
69 while(*vdp && *vdp !=
'=' && *vdp !=
'&') vdp++;
71 if (*vdp ==
'&')
continue;
75 while(*vdp && *vdp !=
'&') vdp++;
76 varsave = *vdp; *vdp =
'\0';
78 if (*varname && *varvalu)
81 *vdp = varsave; *(varvalu-1) =
'=';
92 while(*value)
if (*value ==
',') {*value =
'\0';
return ++value;}
101 #define TIDY_ENVVAR " Xrd Ouc Env "
103 void XrdOucEnv::EnvBuildTidy()
105 char *tidyEnv, *authInfo, *accessAuthInfo =
nullptr, *working=global_env;
106 int aBeg, aEnd, aCount = 6;
111 if ((authInfo = strstr(global_env,
"authz=")) == 0 && (accessAuthInfo = strstr(global_env,
"access_token=")) == 0)
119 for (
int idx = 0; idx < 2; idx++)
123 accessAuthInfo = strstr(working,
"access_token=");
126 authInfo = accessAuthInfo;
128 if (!authInfo)
continue;
129 aBeg = authInfo - working;
130 if (aBeg && working[aBeg-1] ==
'&') aBeg--;
131 if (!(tidyEnv = index(authInfo+aCount,
'&')))
132 {
char aSave = working[aBeg];
136 working[aBeg] = aSave;
142 do{
if ((aEnd = tidyStr.
find(
'&', aBeg+aCount)) ==
STR_NPOS)
143 {tidyStr.
erase(aBeg);
146 tidyStr.
erase(aBeg, aEnd-aBeg);
147 }
while((aBeg = tidyStr.
find(idx ?
"&access_token=" :
"&authz=")) !=
STR_NPOS);
167 if ((envlen = global_len) == 0 || global_env == 0)
return 0;
172 {
if (*tidyEnv == 0)
break;
173 envlen = strlen(tidyEnv);
190 int vLen = strlen(Var);
199 eBuff = (
char *)malloc(vLen+strlen(Val)+2);
205 strcpy(eBuff+vLen+1, Val);
206 return putenv(eBuff);
214 sprintf(buff,
"%d", Val);
224 char *value = getenv( var );
225 if( !value || !*value )
238 if( !
Import( var, value ) )
242 val = strtol( value, &status, 0 );
260 if ((cP = env_Hash.
Find(varname)) == NULL)
return -999999999;
272 char stringValue[24];
273 sprintf(stringValue,
"%ld", value);
284 char *cP, *Value = (
char *)&Valp;
285 int cLen, n, i = 0, Odd = 0;
289 if ((cP = env_Hash.
Find(varname)) == NULL)
return (
void *)0;
293 if ((cLen = strlen(cP)) != (int)
sizeof(
void *)*2)
return (
void *)0;
298 {
if (*cP >=
'0' && *cP <=
'9') n = *cP-48;
299 else if (*cP >=
'a' && *cP <=
'f') n = *cP-87;
300 else if (*cP >=
'A' && *cP <=
'F') n = *cP-55;
301 else return (
void *)0;
302 if (Odd) Value[i++] |= n;
303 else Value[i ] = n << 4;
318 static char hv[] =
"0123456789abcdef";
319 char Buff[
sizeof(
void *)*2+1], *Value = (
char *)&value;
324 if (value)
for (i = 0; i <(int)
sizeof(
void *); i++)
325 {Buff[j++] = hv[(Value[i] >> 4) & 0x0f];
326 Buff[j++] = hv[ Value[i] & 0x0f];
void PutInt(const char *varname, long value)
long GetInt(const char *varname)
char * EnvTidy(int &envlen)
static bool Import(const char *var, char *&val)
static int Export(const char *Var, const char *Val)
void * GetPtr(const char *varname)
char * Get(const char *varname)
void PutPtr(const char *varname, void *value)
void Put(const char *varname, const char *value)
char * Delimit(char *value)
XrdOucEnv(const char *vardata=0, int vardlen=0, const XrdSecEntity *secent=0)
T * Rep(const char *KeyVal, T *KeyData, const int LifeTime=0, XrdOucHash_Options opt=Hash_default)
T * Find(const char *KeyVal, time_t *KeyTime=0)
const char * c_str() const
int erase(int start=0, int size=0)
int find(const char c, int start=0, bool forward=1)