summaryrefslogtreecommitdiff
path: root/source3/libads/ads_struct.c
diff options
context:
space:
mode:
authorSamuel Cabrero <scabrero@samba.org>2022-06-15 10:38:51 +0200
committerJeremy Allison <jra@samba.org>2022-06-27 15:50:30 +0000
commit9530ca8537250e84f00f9a55f2e955a06c613f18 (patch)
tree03494233a8bef3936de4a038cc3ec71e6d2458b5 /source3/libads/ads_struct.c
parentb8a0446a4da2c220c8c3bf1ce17842bbce732c9d (diff)
downloadsamba-9530ca8537250e84f00f9a55f2e955a06c613f18.tar.gz
s3:libads: Return ADS_STATUS from ads_build_path()
Signed-off-by: Samuel Cabrero <scabrero@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/libads/ads_struct.c')
-rw-r--r--source3/libads/ads_struct.c33
1 files changed, 25 insertions, 8 deletions
diff --git a/source3/libads/ads_struct.c b/source3/libads/ads_struct.c
index 5453a00a853..fdd80b3934a 100644
--- a/source3/libads/ads_struct.c
+++ b/source3/libads/ads_struct.c
@@ -24,7 +24,11 @@
/* return a ldap dn path from a string, given separators and field name
caller must free
*/
-char *ads_build_path(const char *realm, const char *sep, const char *field, int reverse)
+ADS_STATUS ads_build_path(const char *realm,
+ const char *sep,
+ const char *field,
+ int reverse,
+ char **_path)
{
char *p, *r;
int numbits = 0;
@@ -32,10 +36,12 @@ char *ads_build_path(const char *realm, const char *sep, const char *field, int
int len;
char *saveptr;
+ *_path = NULL;
+
r = SMB_STRDUP(realm);
if (!r || !*r) {
- return r;
+ return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
}
for (p=r; *p; p++) {
@@ -49,21 +55,21 @@ char *ads_build_path(const char *realm, const char *sep, const char *field, int
ret = (char *)SMB_MALLOC(len);
if (!ret) {
free(r);
- return NULL;
+ return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
}
if (strlcpy(ret,field, len) >= len) {
/* Truncate ! */
free(r);
free(ret);
- return NULL;
+ return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
}
p=strtok_r(r, sep, &saveptr);
if (p) {
if (strlcat(ret, p, len) >= len) {
free(r);
free(ret);
- return NULL;
+ return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
}
while ((p=strtok_r(NULL, sep, &saveptr)) != NULL) {
@@ -76,7 +82,7 @@ char *ads_build_path(const char *realm, const char *sep, const char *field, int
free(ret);
if (retval == -1) {
free(r);
- return NULL;
+ return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
}
ret = SMB_STRDUP(s);
free(s);
@@ -84,7 +90,10 @@ char *ads_build_path(const char *realm, const char *sep, const char *field, int
}
free(r);
- return ret;
+
+ *_path = ret;
+
+ return ADS_ERROR_NT(NT_STATUS_OK);
}
/* return a dn of the form "dc=AA,dc=BB,dc=CC" from a
@@ -93,7 +102,15 @@ char *ads_build_path(const char *realm, const char *sep, const char *field, int
*/
char *ads_build_dn(const char *realm)
{
- return ads_build_path(realm, ".", "dc=", 0);
+ ADS_STATUS status;
+ char *dn = NULL;
+
+ status = ads_build_path(realm, ".", "dc=", 0, &dn);
+ if (!ADS_ERR_OK(status)) {
+ return NULL;
+ }
+
+ return dn;
}
/* return a DNS name in the for aa.bb.cc from the DN