git.samba.org
/
samba.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
e49efe9
)
s4: use enums instead of strings it's cheaper
author
Matthieu Patou
<mat@matws.net>
Sun, 15 Apr 2012 19:37:00 +0000
(12:37 -0700)
committer
Michael Adam
<obnox@samba.org>
Tue, 17 Apr 2012 21:13:16 +0000
(23:13 +0200)
source4/dsdb/samdb/ldb_modules/samldb.c
patch
|
blob
|
history
diff --git
a/source4/dsdb/samdb/ldb_modules/samldb.c
b/source4/dsdb/samdb/ldb_modules/samldb.c
index d8f68c884beba2a7bcf49a8809cc5f99125cf20b..a676851bce63484ed0aaa70a4a731fc513de95fa 100644
(file)
--- a/
source4/dsdb/samdb/ldb_modules/samldb.c
+++ b/
source4/dsdb/samdb/ldb_modules/samldb.c
@@
-42,6
+42,12
@@
#include "libds/common/flag_mapping.h"
struct samldb_ctx;
#include "libds/common/flag_mapping.h"
struct samldb_ctx;
+enum samldb_add_type {
+ SAMLDB_TYPE_USER,
+ SAMLDB_TYPE_GROUP,
+ SAMLDB_TYPE_CLASS,
+ SAMLDB_TYPE_ATTRIBUTE
+};
typedef int (*samldb_step_fn_t)(struct samldb_ctx *);
typedef int (*samldb_step_fn_t)(struct samldb_ctx *);
@@
-55,7
+61,7
@@
struct samldb_ctx {
struct ldb_request *req;
/* used for add operations */
struct ldb_request *req;
/* used for add operations */
-
const char *
type;
+
enum samldb_add_type
type;
/* the resulting message */
struct ldb_message *msg;
/* the resulting message */
struct ldb_message *msg;
@@
-581,7
+587,8
@@
static int samldb_fill_object(struct samldb_ctx *ac)
int ret;
/* Add information for the different account types */
int ret;
/* Add information for the different account types */
- if (strcmp(ac->type, "user") == 0) {
+ switch(ac->type) {
+ case SAMLDB_TYPE_USER: {
struct ldb_control *rodc_control = ldb_request_get_control(ac->req,
LDB_CONTROL_RODC_DCPROMO_OID);
if (rodc_control != NULL) {
struct ldb_control *rodc_control = ldb_request_get_control(ac->req,
LDB_CONTROL_RODC_DCPROMO_OID);
if (rodc_control != NULL) {
@@
-597,16
+604,20
@@
static int samldb_fill_object(struct samldb_ctx *ac)
ret = samldb_add_step(ac, samldb_add_entry);
if (ret != LDB_SUCCESS) return ret;
ret = samldb_add_step(ac, samldb_add_entry);
if (ret != LDB_SUCCESS) return ret;
+ break;
+ }
-
} else if (strcmp(ac->type, "group") == 0)
{
+
case SAMLDB_TYPE_GROUP:
{
/* check if we have a valid sAMAccountName */
ret = samldb_add_step(ac, samldb_check_sAMAccountName);
if (ret != LDB_SUCCESS) return ret;
ret = samldb_add_step(ac, samldb_add_entry);
if (ret != LDB_SUCCESS) return ret;
/* check if we have a valid sAMAccountName */
ret = samldb_add_step(ac, samldb_check_sAMAccountName);
if (ret != LDB_SUCCESS) return ret;
ret = samldb_add_step(ac, samldb_add_entry);
if (ret != LDB_SUCCESS) return ret;
+ break;
+ }
-
} else if (strcmp(ac->type, "classSchema") == 0)
{
+
case SAMLDB_TYPE_CLASS:
{
const struct ldb_val *rdn_value, *def_obj_cat_val;
ret = samdb_find_or_add_attribute(ldb, ac->msg,
const struct ldb_val *rdn_value, *def_obj_cat_val;
ret = samdb_find_or_add_attribute(ldb, ac->msg,
@@
-684,8
+695,10
@@
static int samldb_fill_object(struct samldb_ctx *ac)
* lookup DN was already saved in "ac->dn" */
ret = samldb_add_step(ac, samldb_find_for_defaultObjectCategory);
if (ret != LDB_SUCCESS) return ret;
* lookup DN was already saved in "ac->dn" */
ret = samldb_add_step(ac, samldb_find_for_defaultObjectCategory);
if (ret != LDB_SUCCESS) return ret;
+ break;
+ }
-
} else if (strcmp(ac->type, "attributeSchema") == 0)
{
+
case SAMLDB_TYPE_ATTRIBUTE:
{
const struct ldb_val *rdn_value;
rdn_value = ldb_dn_get_rdn_val(ac->msg->dn);
if (rdn_value == NULL) {
const struct ldb_val *rdn_value;
rdn_value = ldb_dn_get_rdn_val(ac->msg->dn);
if (rdn_value == NULL) {
@@
-732,11
+745,13
@@
static int samldb_fill_object(struct samldb_ctx *ac)
ret = samldb_add_step(ac, samldb_add_entry);
if (ret != LDB_SUCCESS) return ret;
ret = samldb_add_step(ac, samldb_add_entry);
if (ret != LDB_SUCCESS) return ret;
+ break;
+ }
- } else {
- ldb_asprintf_errstring(ldb,
- "Invalid entry type!");
+ default:
+ ldb_asprintf_errstring(ldb, "Invalid entry type!");
return LDB_ERR_OPERATIONS_ERROR;
return LDB_ERR_OPERATIONS_ERROR;
+ break;
}
return samldb_first_step(ac);
}
return samldb_first_step(ac);
@@
-862,7
+877,8
@@
static int samldb_objectclass_trigger(struct samldb_ctx *ac)
if (ret != LDB_SUCCESS) return ret;
}
if (ret != LDB_SUCCESS) return ret;
}
- if (strcmp(ac->type, "user") == 0) {
+ switch(ac->type) {
+ case SAMLDB_TYPE_USER: {
bool uac_generated = false;
/* Step 1.2: Default values */
bool uac_generated = false;
/* Step 1.2: Default values */
@@
-1008,8
+1024,10
@@
static int samldb_objectclass_trigger(struct samldb_ctx *ac)
}
}
}
}
}
}
+ break;
+ }
-
} else if (strcmp(ac->type, "group") == 0)
{
+
case SAMLDB_TYPE_GROUP:
{
const char *tempstr;
/* Step 2.2: Default values */
const char *tempstr;
/* Step 2.2: Default values */
@@
-1051,6
+1069,14
@@
static int samldb_objectclass_trigger(struct samldb_ctx *ac)
el2 = ldb_msg_find_element(ac->msg, "sAMAccountType");
el2->flags = LDB_FLAG_MOD_REPLACE;
}
el2 = ldb_msg_find_element(ac->msg, "sAMAccountType");
el2->flags = LDB_FLAG_MOD_REPLACE;
}
+ break;
+ }
+
+ default:
+ ldb_asprintf_errstring(ldb,
+ "Invalid entry type!");
+ return LDB_ERR_OPERATIONS_ERROR;
+ break;
}
return LDB_SUCCESS;
}
return LDB_SUCCESS;
@@
-1967,7
+1993,7
@@
static int samldb_add(struct ldb_module *module, struct ldb_request *req)
if (samdb_find_attribute(ldb, ac->msg,
"objectclass", "user") != NULL) {
if (samdb_find_attribute(ldb, ac->msg,
"objectclass", "user") != NULL) {
- ac->type =
"user"
;
+ ac->type =
SAMLDB_TYPE_USER
;
ret = samldb_prim_group_trigger(ac);
if (ret != LDB_SUCCESS) {
ret = samldb_prim_group_trigger(ac);
if (ret != LDB_SUCCESS) {
@@
-1984,7
+2010,7
@@
static int samldb_add(struct ldb_module *module, struct ldb_request *req)
if (samdb_find_attribute(ldb, ac->msg,
"objectclass", "group") != NULL) {
if (samdb_find_attribute(ldb, ac->msg,
"objectclass", "group") != NULL) {
- ac->type =
"group"
;
+ ac->type =
SAMLDB_TYPE_GROUP
;
ret = samldb_objectclass_trigger(ac);
if (ret != LDB_SUCCESS) {
ret = samldb_objectclass_trigger(ac);
if (ret != LDB_SUCCESS) {
@@
-2009,7
+2035,7
@@
static int samldb_add(struct ldb_module *module, struct ldb_request *req)
return ret;
}
return ret;
}
- ac->type =
"classSchema"
;
+ ac->type =
SAMLDB_TYPE_CLASS
;
return samldb_fill_object(ac);
}
return samldb_fill_object(ac);
}
@@
-2021,7
+2047,7
@@
static int samldb_add(struct ldb_module *module, struct ldb_request *req)
return ret;
}
return ret;
}
- ac->type =
"attributeSchema"
;
+ ac->type =
SAMLDB_TYPE_ATTRIBUTE
;
return samldb_fill_object(ac);
}
return samldb_fill_object(ac);
}