summaryrefslogtreecommitdiffstats
path: root/daemons
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2012-08-27 16:21:02 +0200
committerMartin Kosek <mkosek@redhat.com>2012-09-06 09:27:18 +0200
commit2b37eab1d58fdba4888de81e29fdea62819834ec (patch)
tree2762074a06d09d3ad47ed29a8798adfa349770df /daemons
parent4752d410fda578a7e43a6080088e5a674a2f18fa (diff)
downloadfreeipa.git-2b37eab1d58fdba4888de81e29fdea62819834ec.tar.gz
freeipa.git-2b37eab1d58fdba4888de81e29fdea62819834ec.tar.xz
freeipa.git-2b37eab1d58fdba4888de81e29fdea62819834ec.zip
ipasam: Replace dom_sid_compare_domain()
Diffstat (limited to 'daemons')
-rw-r--r--daemons/ipa-sam/ipa_sam.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/daemons/ipa-sam/ipa_sam.c b/daemons/ipa-sam/ipa_sam.c
index 879e60ba..5ef27dc4 100644
--- a/daemons/ipa-sam/ipa_sam.c
+++ b/daemons/ipa-sam/ipa_sam.c
@@ -87,7 +87,6 @@ bool sid_check_is_builtin(const struct dom_sid *sid); /* available in libpdb.so
bool sid_check_is_our_sam(const struct dom_sid *sid);
bool sid_linearize(char *outbuf, size_t len, const struct dom_sid *sid); /* available in libsmbconf.so */
bool string_to_sid(struct dom_sid *sidout, const char *sidstr); /* available in libsecurity.so */
-int dom_sid_compare_domain(const struct dom_sid *sid1, const struct dom_sid *sid2); /* available in libsecurity.so */
char *sid_string_talloc(TALLOC_CTX *mem_ctx, const struct dom_sid *sid); /* available in libsmbconf.so */
char *sid_string_dbg(const struct dom_sid *sid); /* available in libsmbconf.so */
bool trim_char(char *s,char cfront,char cback); /* available in libutil_str.so */
@@ -215,6 +214,33 @@ static bool is_null_sid(const struct dom_sid *sid)
return true;
}
+static int dom_sid_compare_domain(const struct dom_sid *sid1,
+ const struct dom_sid *sid2)
+{
+ size_t c;
+ size_t n_sub_auths;
+
+ if (sid1->sid_rev_num != sid2->sid_rev_num) {
+ return sid1->sid_rev_num - sid2->sid_rev_num;
+ }
+
+ for (c = 0; c < 6; c++) {
+ if (sid1->id_auth[c] != sid2->id_auth[c]) {
+ return sid1->id_auth[c] - sid2->id_auth[c];
+ }
+ }
+
+ n_sub_auths = (sid1->num_auths < sid2->num_auths) ? sid1->num_auths :
+ sid2->num_auths;
+
+ for (c = 0; c < n_sub_auths; c++) {
+ if (sid1->sub_auths[c] != sid2->sub_auths[c]) {
+ return sid1->sub_auths[c] - sid2->sub_auths[c];
+ }
+ }
+
+ return 0;
+}
static bool strnequal(const char *s1, const char *s2, size_t n) {
if (s1 == s2) {