[1742] in Moira
changes to winad.c
daemon@ATHENA.MIT.EDU (David E. Tanner)
Tue Feb 13 12:46:46 2001
Message-Id: <3.0.32.20010213124401.011c6c50@po14.mit.edu>
Date: Tue, 13 Feb 2001 12:44:02 -0500
To: moiradev@MIT.EDU
From: "David E. Tanner" <dtanner@MIT.EDU>
Mime-Version: 1.0
Content-Type: text/enriched; charset="us-ascii"
<smaller>These changes are to allow winad.incr to suspend processing
similar to afs.incr. Also made a small change to improved return code
checking/processing.
Index: winad.c
===================================================================
RCS file:
/afs/athena.mit.edu/astaff/project/moiradev/repository/moira/incremental/winad/winad.c,v
retrieving revision 1.5
diff -c -r1.5 winad.c
*** winad.c 2001/01/04 09:02:09 1.5
--- winad.c 2001/02/12 16:31:10
***************
*** 54,59 ****
--- 54,60 ----
#include <<stdlib.h>
#include <<malloc.h>
#include <<lmaccess.h>
+ #include <<io.h>
#endif
#include <<string.h>
***************
*** 79,88 ****
--- 80,92 ----
#define EHOSTUNREACH WSAEHOSTUNREACH
#endif
#define krb5_xfree free
+ #define F_OK 0
+ #define sleep(A) Sleep(A * 1000);
#endif /* _WIN32 */
#ifndef _WIN32
#include <<sys/utsname.h>
+ #include <<unistd.h>
#define UCHAR unsigned char
***************
*** 161,166 ****
--- 165,173 ----
struct lk_entry *next;
} LK_ENTRY;
+ #define STOP_FILE "/moira/winad/nowinad"
+ #define file_exists(file) (access((file), F_OK) == 0)
+
#define LDAP_BERVAL struct berval
#define MAX_SERVER_NAMES 32
***************
*** 173,178 ****
--- 180,186 ----
LK_ENTRY *member_base = NULL;
LK_ENTRY *sid_base = NULL;
LK_ENTRY **sid_ptr = NULL;
+ static char tbl_buf[1024];
char kerberos_ou[] = "OU=kerberos, OU=moira, OU=athena";
char contact_ou[] = "OU=strings, OU=moira, OU=athena";
char user_ou[] = "OU=users, OU=moira, OU=athena";
***************
*** 194,199 ****
--- 202,208 ----
extern int locate_ldap_server(char *domain, char *server_name[]);
extern int set_password(char *user, char *domain);
+ void check_winad(void);
int user_create(int ac, char **av, void *ptr);
int user_change_status(int ac, char **av, void *ptr);
int user_delete(LDAP *ldap_handle, char *dn_path, char *u_name);
***************
*** 289,294 ****
--- 298,321 ----
before = &argv[4];
after = &argv[4 + beforec];
+ strcpy(tbl_buf, table);
+ strcat(tbl_buf, " (");
+ for (i = 0; i << beforec; i++)
+ {
+ if (i > 0)
+ strcat(tbl_buf, ",");
+ strcat(tbl_buf, before[i]);
+ }
+ strcat(tbl_buf, ")->(");
+ for (i = 0; i << afterc; i++)
+ {
+ if (i > 0)
+ strcat(tbl_buf, ",");
+ strcat(tbl_buf, after[i]);
+ }
+ strcat(tbl_buf, ")");
+ check_winad();
+
memset(ldap_domain, '\0', sizeof(ldap_domain));
if ((fptr = fopen("winad.cfg", "r")) != NULL)
{
***************
*** 651,685 ****
if (rc = mr_query("get_user_account_by_login", 1, av,
user_update,
call_args))
{
! critical_alert("AD incremental",
! "Could not update user %s info : %s",
! before[U_NAME],
! error_message(rc));
}
- goto cleanup;
}
! com_err(whoami, 0, "Changing user %s to %s", before[U_NAME],
! after[U_NAME]);
! av[0] = after[U_NAME];
! call_args[0] = (char *)ldap_handle;
! call_args[1] = dn_path;
! call_args[2] = (char *)MEMBER_ACTIVATE;
! call_args[3] = before[U_NAME];
! sid_base = NULL;
! sid_ptr = &sid_base;
! callback_rc = 0;
! if (rc = mr_query("get_user_account_by_login", 1, av,
user_rename,
! call_args))
{
! if (rc != LDAP_NO_SUCH_OBJECT)
{
! critical_alert("AD incremental",
! "Could not change user %s to %s : %s",
! before[U_NAME],
! after[U_NAME], error_message(rc));
! goto cleanup;
}
- callback_rc = LDAP_NO_SUCH_OBJECT;
}
if (callback_rc != LDAP_NO_SUCH_OBJECT)
goto cleanup;
--- 678,717 ----
if (rc = mr_query("get_user_account_by_login", 1, av,
user_update,
call_args))
{
! if (callback_rc != LDAP_NO_SUCH_OBJECT)
! {
! critical_alert("AD incremental",
! "Could not update user %s info :
%s",
! before[U_NAME],
! error_message(rc));
! goto cleanup;
! }
}
}
! else
{
! com_err(whoami, 0, "Changing user %s to %s",
before[U_NAME],
! after[U_NAME]);
! av[0] = after[U_NAME];
! call_args[0] = (char *)ldap_handle;
! call_args[1] = dn_path;
! call_args[2] = (char *)MEMBER_ACTIVATE;
! call_args[3] = before[U_NAME];
! sid_base = NULL;
! sid_ptr = &sid_base;
! callback_rc = 0;
! if (rc = mr_query("get_user_account_by_login", 1, av,
user_rename,
! call_args))
{
! if (callback_rc != LDAP_NO_SUCH_OBJECT)
! {
! critical_alert("AD incremental",
! "Could not change user %s to %s :
%s",
! before[U_NAME],
! after[U_NAME], error_message(rc));
! goto cleanup;
! }
}
}
if (callback_rc != LDAP_NO_SUCH_OBJECT)
goto cleanup;
***************
*** 1066,1071 ****
--- 1098,1120 ----
}
(*linklist_current) = linklist_previous;
return(0);
+ }
+
+ void check_winad(void)
+ {
+ int i;
+
+ for (i = 0; file_exists(STOP_FILE); i++)
+ {
+ if (i > 30)
+ {
+ critical_alert("incremental",
+ "WINAD incremental failed (%s exists): %s",
+ STOP_FILE, tbl_buf);
+ exit(1);
+ }
+ sleep(60);
+ }
}
int moira_connect(void)
</smaller>