int smb_xvasprintf(char **ptr, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
+int asprintf_strupper_m(char **strp, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
+char *talloc_asprintf_strupper_m(TALLOC_CTX *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
+
/* we used to use these fns, but now we have good replacements
for snprintf and vsnprintf */
#define slprintf snprintf
return (*psz1 - *psz2);
}
-
-/**
- Convert a string to upper case, but don't modify it.
-**/
-
-char *strupper_static(const char *s)
-{
- static char *str = NULL;
-
- SAFE_FREE(str);
- str = SMB_STRDUP(s);
- strupper_m(str);
- return str;
-}
-
/**
Convert a string to "normal" form.
**/
}
/* this is used to prevent lots of mallocs of size 1 */
-static const char *null_string = "";
+static const char null_string[] = "";
/**
Set a string value, allocing the space for the string
Write an octal as a string.
**/
-const char *octal_string(int i)
+char *octal_string(int i)
{
- static char ret[64];
- if (i == -1)
- return "-1";
- slprintf(ret, sizeof(ret)-1, "0%o", i);
- return ret;
+ char *result;
+ if (i == -1) {
+ result = talloc_strdup(talloc_tos(), "-1");
+ }
+ else {
+ result = talloc_asprintf(talloc_tos(), "0%o", i);
+ }
+ SMB_ASSERT(result != NULL);
+ return result;
}
}
}
-static const char *b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+static const char b64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
/**
* Decode a base64 string into a DATA_BLOB - simple and slow algorithm
*string = NULL;
}
+/*
+ * asprintf into a string and strupper_m it after that.
+ */
+
+int asprintf_strupper_m(char **strp, const char *fmt, ...)
+{
+ va_list ap;
+ char *result;
+ int ret;
+
+ va_start(ap, fmt);
+ ret = vasprintf(&result, fmt, ap);
+ va_end(ap);
+
+ if (ret == -1)
+ return -1;
+
+ strupper_m(result);
+ *strp = result;
+ return ret;
+}
+
+char *talloc_asprintf_strupper_m(TALLOC_CTX *t, const char *fmt, ...)
+{
+ va_list ap;
+ char *ret;
+
+ va_start(ap, fmt);
+ ret = talloc_vasprintf(t, fmt, ap);
+ va_end(ap);
+
+ if (ret == NULL) {
+ return NULL;
+ }
+ strupper_m(ret);
+ return ret;
+}
+
/*
Returns the substring from src between the first occurrence of
the char "front" and the first occurence of the char "back".
{
char *keystr;
- if (asprintf(&keystr, SITENAME_KEY, strupper_static(realm)) == -1) {
+ if (asprintf_strupper_m(&keystr, SITENAME_KEY, realm) == -1) {
return NULL;
}
return NT_STATUS_OK;
}
- tmp = talloc_asprintf(mem_ctx, "%s/%s/%s", filename,
- strupper_static(path), suffix);
+ tmp = talloc_asprintf_strupper_m(mem_ctx, "%s/%s/%s", filename, path,
+ suffix);
NT_STATUS_HAVE_NO_MEMORY(tmp);
if (sys_stat(tmp, &sbuf) == 0) {
return NULL;
}
- return talloc_asprintf(mem_ctx, DSGETDCNAME_FMT,
- strupper_static(domain));
+ return talloc_asprintf_strupper_m(mem_ctx, DSGETDCNAME_FMT, domain);
}
/****************************************************************
int name_type)
{
char *keystr;
- asprintf(&keystr, NBTKEY_FMT, strupper_static(name), name_type);
+ asprintf_strupper_m(&keystr, NBTKEY_FMT, name, name_type);
return keystr;
}
char *keystr;
print_sockaddr(addr, sizeof(addr), keyip);
- asprintf(&keystr, "NBT/%s#%02X.%02X.%s",
- strupper_static(name), name_type1, name_type2, addr);
+ asprintf_strupper_m(&keystr, "NBT/%s#%02X.%02X.%s", name,
+ name_type1, name_type2, addr);
return keystr;
}
{
char *keystr;
- asprintf( &keystr, SAFKEY_FMT, strupper_static(domain) );
+ asprintf_strupper_m(&keystr, SAFKEY_FMT, domain);
return keystr;
}
static char* trustdom_cache_key(const char* name)
{
char* keystr = NULL;
- asprintf(&keystr, TDOMKEY_FMT, strupper_static(name));
+ asprintf_strupper_m(&keystr, TDOMKEY_FMT, name);
return keystr;
}
fprintf(f, "%c", *(char *)ptr);
break;
- case P_OCTAL:
- fprintf(f, "%s", octal_string(*(int *)ptr));
+ case P_OCTAL: {
+ char *o = octal_string(*(int *)ptr);
+ fprintf(f, "%s", o);
+ TALLOC_FREE(o);
break;
+ }
case P_LIST:
if ((char ***)ptr && *(char ***)ptr) {
info100->version_major = lp_major_announce_version();
info100->version_minor = lp_minor_announce_version();
- info100->server_name = talloc_strdup(
- info100, strupper_static(global_myname()));
- info100->domain_name = talloc_strdup(
- info100, strupper_static(lp_workgroup()));
+ info100->server_name = talloc_asprintf_strupper_m(
+ info100, "%s", global_myname());
+ info100->domain_name = talloc_asprintf_strupper_m(
+ info100, "%s", lp_workgroup());
return;
}
}
}
break;
- case P_OCTAL:
- valstr = talloc_asprintf(ctx, "%s", octal_string(*(int *)ptr));
+ case P_OCTAL: {
+ char *o = octal_string(*(int *)ptr);
+ valstr = talloc_move(ctx, &o);
break;
+ }
case P_LIST:
valstr = talloc_strdup(ctx, "");
if ((char ***)ptr && *(char ***)ptr) {
_("Set Default"), make_parm_name(parm->label),(int)(parm->def.ivalue));
break;
- case P_OCTAL:
- printf("<input type=text size=8 name=\"parm_%s\" value=%s>", make_parm_name(parm->label), octal_string(*(int *)ptr));
- printf("<input type=button value=\"%s\" onClick=\"swatform.parm_%s.value=\'%s\'\">",
- _("Set Default"), make_parm_name(parm->label),
- octal_string((int)(parm->def.ivalue)));
+ case P_OCTAL: {
+ char *o;
+ o = octal_string(*(int *)ptr);
+ printf("<input type=text size=8 name=\"parm_%s\" value=%s>",
+ make_parm_name(parm->label), o);
+ TALLOC_FREE(o);
+ o = octal_string((int)(parm->def.ivalue));
+ printf("<input type=button value=\"%s\" "
+ "onClick=\"swatform.parm_%s.value=\'%s\'\">",
+ _("Set Default"), make_parm_name(parm->label), o);
+ TALLOC_FREE(o);
break;
+ }
case P_ENUM:
printf("<select name=\"parm_%s\">",make_parm_name(parm->label));
return;
}
- if (asprintf(&var, "%s_%s", WINBINDD_LOCATOR_KDC_ADDRESS,
- strupper_static(domain->alt_name)) == -1) {
+ if (asprintf_strupper_m(&var, "%s_%s", WINBINDD_LOCATOR_KDC_ADDRESS,
+ domain->alt_name) == -1) {
return;
}
return;
}
- if (asprintf(&var, "%s_%s", WINBINDD_LOCATOR_KDC_ADDRESS,
- strupper_static(domain->alt_name)) == -1) {
+ if (asprintf_strupper_m(&var, "%s_%s", WINBINDD_LOCATOR_KDC_ADDRESS,
+ domain->alt_name) == -1) {
return;
}