put server-side long dce/rpc code in main branch.
[jra/samba/.git] / source3 / smbd / ipc.c
index 47981884546de806c941777aeb06dbe08be809c6..74ae1152171b34b272ba833a79613f8a9a74b345 100644 (file)
@@ -330,8 +330,9 @@ static BOOL init_package(struct pack_desc* p, int count, int subcount)
   p->subcount = 0;
   p->curpos = p->format;
   if (i > n) {
+    p->neededlen = i;
     i = n = 0;
-    p->errcode = NERR_BufTooSmall;
+    p->errcode = ERROR_MORE_DATA;
   }
   else
     p->errcode = NERR_Success;
@@ -456,7 +457,7 @@ va_dcl
     p->usedlen += needed;
   }
   else {
-    if (p->errcode == NERR_Success) p->errcode = NERR_BufTooSmall;
+    if (p->errcode == NERR_Success) p->errcode = ERROR_MORE_DATA;
   }
   return 1;
 }
@@ -1634,7 +1635,7 @@ static BOOL api_SetUserPassword(int cnum,uint16 vuid, char *param,char *data,
    */
 
   if (password_ok(user,pass1,strlen(pass1),NULL) &&
-      chgpasswd(user,pass1,pass2))
+      chgpasswd(user,pass1,pass2,False))
   {
     SSVAL(*rparam,0,NERR_Success);
   }
@@ -1714,6 +1715,9 @@ static BOOL api_SamOEMChangePassword(int cnum,uint16 vuid, char *param,char *dat
    * as the plaintext of the old users password is not 
    * available. JRA.
    */
+
+  if(lp_unix_password_sync())
+    chgpasswd(user,"", new_passwd, True);
  
   if(change_oem_password( smbpw, new_passwd)) {
     SSVAL(*rparam,0,NERR_Success);
@@ -3251,9 +3255,9 @@ static BOOL api_dce_rpc_command(char *outbuf,
        if (reply)
        {
                /* now send the reply */
-               send_trans_reply(outbuf, p->rhdr.data, NULL, NULL, 0, p->max_rdata_len);
+               send_trans_reply(outbuf, p->rhdr.data, NULL, NULL, 0, p->file_offset);
 
-               if (mem_buf_len(p->rhdr.data) <= p->max_rdata_len)
+               if (mem_buf_len(p->rhdr.data) <= p->file_offset)
                {
                        /* all of data was sent: no need to wait for SMBreadX calls */
                        mem_free_data(p->rhdr .data);
@@ -3279,7 +3283,7 @@ static BOOL api_SNPHS(char *outbuf, pipes_struct *p, char *param)
        if (set_rpc_pipe_hnd_state(p, id))
        {
                /* now send the reply */
-               send_trans_reply(outbuf, NULL, NULL, NULL, 0, p->max_rdata_len);
+               send_trans_reply(outbuf, NULL, NULL, NULL, 0, p->file_offset);
 
                return True;
        }
@@ -3362,7 +3366,10 @@ static int api_fd_reply(int cnum,uint16 vuid,char *outbuf,
                                  tdscnt,tpscnt,mdrcnt,mprcnt,cnum,vuid));
 
                /* record maximum data length that can be transmitted in an SMBtrans */
-               p->max_rdata_len = mdrcnt;
+               p->file_offset = mdrcnt;
+
+                DEBUG(10,("api_fd_reply: p:%p file_offset: %d\n",
+                           p, p->file_offset));
 
                switch (subcommand)
                {
@@ -3441,37 +3448,37 @@ struct
 {
   char *name;
   int id;
-  BOOL (*fn)();
+  BOOL (*fn)(int,uint16,char *,char *,int,int,char **,char **,int *,int *);
   int flags;
 } api_commands[] = {
-  {"RNetShareEnum",    0,      (BOOL (*)())api_RNetShareEnum,0},
-  {"RNetShareGetInfo", 1,      (BOOL (*)())api_RNetShareGetInfo,0},
-  {"RNetServerGetInfo",        13,     (BOOL (*)())api_RNetServerGetInfo,0},
-  {"RNetGroupGetUsers", 52,    (BOOL (*)())api_RNetGroupGetUsers,0},
-  {"RNetUserGetInfo",  56,     (BOOL (*)())api_RNetUserGetInfo,0},
-  {"NetUserGetGroups", 59,     (BOOL (*)())api_NetUserGetGroups,0},
-  {"NetWkstaGetInfo",  63,     (BOOL (*)())api_NetWkstaGetInfo,0},
-  {"DosPrintQEnum",    69,     (BOOL (*)())api_DosPrintQEnum,0},
-  {"DosPrintQGetInfo", 70,     (BOOL (*)())api_DosPrintQGetInfo,0},
-  {"WPrintJobEnumerate",76,    (BOOL (*)())api_WPrintJobEnumerate,0},
-  {"WPrintJobGetInfo", 77,     (BOOL (*)())api_WPrintJobGetInfo,0},
-  {"RDosPrintJobDel",  81,     (BOOL (*)())api_RDosPrintJobDel,0},
-  {"RDosPrintJobPause",        82,     (BOOL (*)())api_RDosPrintJobDel,0},
-  {"RDosPrintJobResume",83,    (BOOL (*)())api_RDosPrintJobDel,0},
-  {"WPrintDestEnum",   84,     (BOOL (*)())api_WPrintDestEnum,0},
-  {"WPrintDestGetInfo",        85,     (BOOL (*)())api_WPrintDestGetInfo,0},
-  {"NetRemoteTOD",     91,     (BOOL (*)())api_NetRemoteTOD,0},
-  {"WPrintQueuePurge", 103,    (BOOL (*)())api_WPrintQueuePurge,0},
-  {"NetServerEnum",    104,    (BOOL (*)())api_RNetServerEnum,0},
-  {"WAccessGetUserPerms",105,  (BOOL (*)())api_WAccessGetUserPerms,0},
-  {"SetUserPassword",  115,    (BOOL (*)())api_SetUserPassword,0},
-  {"WWkstaUserLogon",  132,    (BOOL (*)())api_WWkstaUserLogon,0},
-  {"PrintJobInfo",     147,    (BOOL (*)())api_PrintJobInfo,0},
-  {"WPrintDriverEnum", 205,    (BOOL (*)())api_WPrintDriverEnum,0},
-  {"WPrintQProcEnum",  206,    (BOOL (*)())api_WPrintQProcEnum,0},
-  {"WPrintPortEnum",   207,    (BOOL (*)())api_WPrintPortEnum,0},
-  {"SamOEMChangePassword", 214, (BOOL (*)())api_SamOEMChangePassword,0},
-  {NULL,               -1,     (BOOL (*)())api_Unsupported,0}};
+  {"RNetShareEnum",    0,      api_RNetShareEnum,0},
+  {"RNetShareGetInfo", 1,      api_RNetShareGetInfo,0},
+  {"RNetServerGetInfo",        13,     api_RNetServerGetInfo,0},
+  {"RNetGroupGetUsers", 52,    api_RNetGroupGetUsers,0},
+  {"RNetUserGetInfo",  56,     api_RNetUserGetInfo,0},
+  {"NetUserGetGroups", 59,     api_NetUserGetGroups,0},
+  {"NetWkstaGetInfo",  63,     api_NetWkstaGetInfo,0},
+  {"DosPrintQEnum",    69,     api_DosPrintQEnum,0},
+  {"DosPrintQGetInfo", 70,     api_DosPrintQGetInfo,0},
+  {"WPrintJobEnumerate",76,    api_WPrintJobEnumerate,0},
+  {"WPrintJobGetInfo", 77,     api_WPrintJobGetInfo,0},
+  {"RDosPrintJobDel",  81,     api_RDosPrintJobDel,0},
+  {"RDosPrintJobPause",        82,     api_RDosPrintJobDel,0},
+  {"RDosPrintJobResume",83,    api_RDosPrintJobDel,0},
+  {"WPrintDestEnum",   84,     api_WPrintDestEnum,0},
+  {"WPrintDestGetInfo",        85,     api_WPrintDestGetInfo,0},
+  {"NetRemoteTOD",     91,     api_NetRemoteTOD,0},
+  {"WPrintQueuePurge", 103,    api_WPrintQueuePurge,0},
+  {"NetServerEnum",    104,    api_RNetServerEnum,0},
+  {"WAccessGetUserPerms",105,  api_WAccessGetUserPerms,0},
+  {"SetUserPassword",  115,    api_SetUserPassword,0},
+  {"WWkstaUserLogon",  132,    api_WWkstaUserLogon,0},
+  {"PrintJobInfo",     147,    api_PrintJobInfo,0},
+  {"WPrintDriverEnum", 205,    api_WPrintDriverEnum,0},
+  {"WPrintQProcEnum",  206,    api_WPrintQProcEnum,0},
+  {"WPrintPortEnum",   207,    api_WPrintPortEnum,0},
+  {"SamOEMChangePassword", 214, api_SamOEMChangePassword,0},
+  {NULL,               -1,     api_Unsupported,0}};
 
 
 /****************************************************************************