}
+/*************************************************
+* Timezone environment flipping *
+*************************************************/
+
+static uschar *
+to_tz(uschar * tz)
+{
+ uschar * old = US getenv("TZ");
+ setenv("TZ", CS tz, 1);
+ tzset();
+ return old;
+}
+static void
+restore_tz(uschar * tz)
+{
+ if (tz)
+ setenv("TZ", CS tz, 1);
+ else
+ unsetenv("TZ");
+ tzset();
+}
+
/*************************************************
* Many functions are package-specific *
*************************************************/
#endif
}
+
+#ifdef SUPPORT_TLS
/************************************************
* TLS certificate name operations *
************************************************/
Arguments:
dn Distinguished Name string
- mod string containing optional list-sep and
+ mod list containing optional output list-sep and
field selector match, comma-separated
Return:
allocated string with list of matching fields,
int len;
uschar * list = NULL;
-while (ele = string_nextinlist(&mod, &insep, NULL, 0))
+while ((ele = string_nextinlist(&mod, &insep, NULL, 0)))
if (ele[0] != '>')
match = ele; /* field tag to match */
else if (ele[1])
- outsep = ele[1]; /* nondefault separator */
+ outsep = ele[1]; /* nondefault output separator */
dn_to_list(dn);
insep = ',';
-len = Ustrlen(match);
-while (ele = string_nextinlist(&dn, &insep, NULL, 0))
- if (Ustrncmp(ele, match, len) == 0 && ele[len] == '=')
+len = match ? Ustrlen(match) : -1;
+while ((ele = string_nextinlist(&dn, &insep, NULL, 0)))
+ if ( !match
+ || Ustrncmp(ele, match, len) == 0 && ele[len] == '='
+ )
list = string_append_listele(list, outsep, ele+len+1);
return list;
}
-#ifdef EXPERIMENTAL_CERTNAMES
/* Compare a domain name with a possibly-wildcarded name. Wildcards
are restricted to a single one, as the first element of patterns
having at least three dot-separated elements. Case-independent.
if ((altnames = tls_cert_subject_altname(cert, US"dns")))
{
int alt_sep = '\n';
- while (cmpname = string_nextinlist(&namelist, &cmp_sep, NULL, 0))
+ while ((cmpname = string_nextinlist(&namelist, &cmp_sep, NULL, 0)))
{
uschar * an = altnames;
- while (certname = string_nextinlist(&an, &alt_sep, NULL, 0))
+ while ((certname = string_nextinlist(&an, &alt_sep, NULL, 0)))
if (is_name_match(cmpname, certname))
return TRUE;
}
else if ((subjdn = tls_cert_subject(cert, NULL)))
{
int sn_sep = ',';
- uschar * sn;
dn_to_list(subjdn);
- while (cmpname = string_nextinlist(&namelist, &cmp_sep, NULL, 0))
+ while ((cmpname = string_nextinlist(&namelist, &cmp_sep, NULL, 0)))
{
uschar * sn = subjdn;
- while (certname = string_nextinlist(&sn, &sn_sep, NULL, 0))
+ while ((certname = string_nextinlist(&sn, &sn_sep, NULL, 0)))
if ( *certname++ == 'C'
&& *certname++ == 'N'
&& *certname++ == '='
}
return FALSE;
}
-#endif
+#endif /*SUPPORT_TLS*/
/* vi: aw ai sw=2
*/