[1742] in Moira

home help back first fref pref prev next nref lref last post

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>

home help back first fref pref prev next nref lref last post