[BACK]Return to monitor.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/monitor.c between version 1.13 and 1.14

version 1.13, 2002/06/04 19:53:40 version 1.14, 2002/06/04 23:05:49
Line 256 
Line 256 
                 if (authenticated) {                  if (authenticated) {
                         if (!(ent->flags & MON_AUTHDECIDE))                          if (!(ent->flags & MON_AUTHDECIDE))
                                 fatal("%s: unexpected authentication from %d",                                  fatal("%s: unexpected authentication from %d",
                                     __FUNCTION__, ent->type);                                      __func__, ent->type);
                         if (authctxt->pw->pw_uid == 0 &&                          if (authctxt->pw->pw_uid == 0 &&
                             !auth_root_allowed(auth_method))                              !auth_root_allowed(auth_method))
                                 authenticated = 0;                                  authenticated = 0;
Line 271 
Line 271 
         }          }
   
         if (!authctxt->valid)          if (!authctxt->valid)
                 fatal("%s: authenticated invalid user", __FUNCTION__);                  fatal("%s: authenticated invalid user", __func__);
   
         debug("%s: %s has been authenticated by privileged process",          debug("%s: %s has been authenticated by privileged process",
             __FUNCTION__, authctxt->user);              __func__, authctxt->user);
   
         mm_get_keystate(pmonitor);          mm_get_keystate(pmonitor);
   
Line 325 
Line 325 
         mm_request_receive(pmonitor->m_sendfd, &m);          mm_request_receive(pmonitor->m_sendfd, &m);
         type = buffer_get_char(&m);          type = buffer_get_char(&m);
   
         debug3("%s: checking request %d", __FUNCTION__, type);          debug3("%s: checking request %d", __func__, type);
   
         while (ent->f != NULL) {          while (ent->f != NULL) {
                 if (ent->type == type)                  if (ent->type == type)
Line 335 
Line 335 
   
         if (ent->f != NULL) {          if (ent->f != NULL) {
                 if (!(ent->flags & MON_PERMIT))                  if (!(ent->flags & MON_PERMIT))
                         fatal("%s: unpermitted request %d", __FUNCTION__,                          fatal("%s: unpermitted request %d", __func__,
                             type);                              type);
                 ret = (*ent->f)(pmonitor->m_sendfd, &m);                  ret = (*ent->f)(pmonitor->m_sendfd, &m);
                 buffer_free(&m);                  buffer_free(&m);
   
                 /* The child may use this request only once, disable it */                  /* The child may use this request only once, disable it */
                 if (ent->flags & MON_ONCE) {                  if (ent->flags & MON_ONCE) {
                         debug2("%s: %d used once, disabling now", __FUNCTION__,                          debug2("%s: %d used once, disabling now", __func__,
                             type);                              type);
                         ent->flags &= ~MON_PERMIT;                          ent->flags &= ~MON_PERMIT;
                 }                  }
Line 353 
Line 353 
                 return ret;                  return ret;
         }          }
   
         fatal("%s: unsupported request: %d", __FUNCTION__, type);          fatal("%s: unsupported request: %d", __func__, type);
   
         /* NOTREACHED */          /* NOTREACHED */
         return (-1);          return (-1);
Line 398 
Line 398 
         max = buffer_get_int(m);          max = buffer_get_int(m);
   
         debug3("%s: got parameters: %d %d %d",          debug3("%s: got parameters: %d %d %d",
             __FUNCTION__, min, want, max);              __func__, min, want, max);
         /* We need to check here, too, in case the child got corrupted */          /* We need to check here, too, in case the child got corrupted */
         if (max < min || want < min || max < want)          if (max < min || want < min || max < want)
                 fatal("%s: bad parameters: %d %d %d",                  fatal("%s: bad parameters: %d %d %d",
                     __FUNCTION__, min, want, max);                      __func__, min, want, max);
   
         buffer_clear(m);          buffer_clear(m);
   
Line 431 
Line 431 
         u_int siglen, datlen;          u_int siglen, datlen;
         int keyid;          int keyid;
   
         debug3("%s", __FUNCTION__);          debug3("%s", __func__);
   
         keyid = buffer_get_int(m);          keyid = buffer_get_int(m);
         p = buffer_get_string(m, &datlen);          p = buffer_get_string(m, &datlen);
   
         if (datlen != 20)          if (datlen != 20)
                 fatal("%s: data length incorrect: %d", __FUNCTION__, datlen);                  fatal("%s: data length incorrect: %d", __func__, datlen);
   
         /* save session id, it will be passed on the first call */          /* save session id, it will be passed on the first call */
         if (session_id2_len == 0) {          if (session_id2_len == 0) {
Line 447 
Line 447 
         }          }
   
         if ((key = get_hostkey_by_index(keyid)) == NULL)          if ((key = get_hostkey_by_index(keyid)) == NULL)
                 fatal("%s: no hostkey from index %d", __FUNCTION__, keyid);                  fatal("%s: no hostkey from index %d", __func__, keyid);
         if (key_sign(key, &signature, &siglen, p, datlen) < 0)          if (key_sign(key, &signature, &siglen, p, datlen) < 0)
                 fatal("%s: key_sign failed", __FUNCTION__);                  fatal("%s: key_sign failed", __func__);
   
         debug3("%s: signature %p(%d)", __FUNCTION__, signature, siglen);          debug3("%s: signature %p(%d)", __func__, signature, siglen);
   
         buffer_clear(m);          buffer_clear(m);
         buffer_put_string(m, signature, siglen);          buffer_put_string(m, signature, siglen);
Line 476 
Line 476 
         struct passwd *pwent;          struct passwd *pwent;
         int allowed = 0;          int allowed = 0;
   
         debug3("%s", __FUNCTION__);          debug3("%s", __func__);
   
         if (authctxt->attempt++ != 0)          if (authctxt->attempt++ != 0)
                 fatal("%s: multiple attempts for getpwnam", __FUNCTION__);                  fatal("%s: multiple attempts for getpwnam", __func__);
   
         login = buffer_get_string(m, NULL);          login = buffer_get_string(m, NULL);
   
Line 510 
Line 510 
         buffer_put_cstring(m, pwent->pw_shell);          buffer_put_cstring(m, pwent->pw_shell);
   
  out:   out:
         debug3("%s: sending MONITOR_ANS_PWNAM: %d", __FUNCTION__, allowed);          debug3("%s: sending MONITOR_ANS_PWNAM: %d", __func__, allowed);
         mm_request_send(socket, MONITOR_ANS_PWNAM, m);          mm_request_send(socket, MONITOR_ANS_PWNAM, m);
   
         /* For SSHv1 allow authentication now */          /* For SSHv1 allow authentication now */
Line 549 
Line 549 
         authctxt->service = buffer_get_string(m, NULL);          authctxt->service = buffer_get_string(m, NULL);
         authctxt->style = buffer_get_string(m, NULL);          authctxt->style = buffer_get_string(m, NULL);
         debug3("%s: service=%s, style=%s",          debug3("%s: service=%s, style=%s",
             __FUNCTION__, authctxt->service, authctxt->style);              __func__, authctxt->service, authctxt->style);
   
         if (strlen(authctxt->style) == 0) {          if (strlen(authctxt->style) == 0) {
                 xfree(authctxt->style);                  xfree(authctxt->style);
Line 576 
Line 576 
         buffer_clear(m);          buffer_clear(m);
         buffer_put_int(m, authenticated);          buffer_put_int(m, authenticated);
   
         debug3("%s: sending result %d", __FUNCTION__, authenticated);          debug3("%s: sending result %d", __func__, authenticated);
         mm_request_send(socket, MONITOR_ANS_AUTHPASSWORD, m);          mm_request_send(socket, MONITOR_ANS_AUTHPASSWORD, m);
   
         call_count++;          call_count++;
Line 607 
Line 607 
         if (res != -1)          if (res != -1)
                 buffer_put_cstring(m, prompts[0]);                  buffer_put_cstring(m, prompts[0]);
   
         debug3("%s: sending challenge res: %d", __FUNCTION__, res);          debug3("%s: sending challenge res: %d", __func__, res);
         mm_request_send(socket, MONITOR_ANS_BSDAUTHQUERY, m);          mm_request_send(socket, MONITOR_ANS_BSDAUTHQUERY, m);
   
         if (res != -1) {          if (res != -1) {
Line 627 
Line 627 
         int authok;          int authok;
   
         if (authctxt->as == 0)          if (authctxt->as == 0)
                 fatal("%s: no bsd auth session", __FUNCTION__);                  fatal("%s: no bsd auth session", __func__);
   
         response = buffer_get_string(m, NULL);          response = buffer_get_string(m, NULL);
         authok = options.challenge_response_authentication &&          authok = options.challenge_response_authentication &&
             auth_userresponse(authctxt->as, response, 0);              auth_userresponse(authctxt->as, response, 0);
         authctxt->as = NULL;          authctxt->as = NULL;
         debug3("%s: <%s> = <%d>", __FUNCTION__, response, authok);          debug3("%s: <%s> = <%d>", __func__, response, authok);
         xfree(response);          xfree(response);
   
         buffer_clear(m);          buffer_clear(m);
         buffer_put_int(m, authok);          buffer_put_int(m, authok);
   
         debug3("%s: sending authenticated: %d", __FUNCTION__, authok);          debug3("%s: sending authenticated: %d", __func__, authok);
         mm_request_send(socket, MONITOR_ANS_BSDAUTHRESPOND, m);          mm_request_send(socket, MONITOR_ANS_BSDAUTHRESPOND, m);
   
         auth_method = "bsdauth";          auth_method = "bsdauth";
Line 663 
Line 663 
         if (res != -1)          if (res != -1)
                 buffer_put_cstring(m, challenge);                  buffer_put_cstring(m, challenge);
   
         debug3("%s: sending challenge res: %d", __FUNCTION__, res);          debug3("%s: sending challenge res: %d", __func__, res);
         mm_request_send(socket, MONITOR_ANS_SKEYQUERY, m);          mm_request_send(socket, MONITOR_ANS_SKEYQUERY, m);
   
         return (0);          return (0);
Line 687 
Line 687 
         buffer_clear(m);          buffer_clear(m);
         buffer_put_int(m, authok);          buffer_put_int(m, authok);
   
         debug3("%s: sending authenticated: %d", __FUNCTION__, authok);          debug3("%s: sending authenticated: %d", __func__, authok);
         mm_request_send(socket, MONITOR_ANS_SKEYRESPOND, m);          mm_request_send(socket, MONITOR_ANS_SKEYRESPOND, m);
   
         auth_method = "skey";          auth_method = "skey";
Line 700 
Line 700 
 mm_append_debug(Buffer *m)  mm_append_debug(Buffer *m)
 {  {
         if (auth_debug_init && buffer_len(&auth_debug)) {          if (auth_debug_init && buffer_len(&auth_debug)) {
                 debug3("%s: Appending debug messages for child", __FUNCTION__);                  debug3("%s: Appending debug messages for child", __func__);
                 buffer_append(m, buffer_ptr(&auth_debug),                  buffer_append(m, buffer_ptr(&auth_debug),
                     buffer_len(&auth_debug));                      buffer_len(&auth_debug));
                 buffer_clear(&auth_debug);                  buffer_clear(&auth_debug);
Line 716 
Line 716 
         enum mm_keytype type = 0;          enum mm_keytype type = 0;
         int allowed = 0;          int allowed = 0;
   
         debug3("%s entering", __FUNCTION__);          debug3("%s entering", __func__);
   
         type = buffer_get_int(m);          type = buffer_get_int(m);
         cuser = buffer_get_string(m, NULL);          cuser = buffer_get_string(m, NULL);
Line 727 
Line 727 
   
         if ((compat20 && type == MM_RSAHOSTKEY) ||          if ((compat20 && type == MM_RSAHOSTKEY) ||
             (!compat20 && type != MM_RSAHOSTKEY))              (!compat20 && type != MM_RSAHOSTKEY))
                 fatal("%s: key type and protocol mismatch", __FUNCTION__);                  fatal("%s: key type and protocol mismatch", __func__);
   
         debug3("%s: key_from_blob: %p", __FUNCTION__, key);          debug3("%s: key_from_blob: %p", __func__, key);
   
         if (key != NULL && authctxt->pw != NULL) {          if (key != NULL && authctxt->pw != NULL) {
                 switch(type) {                  switch(type) {
Line 749 
Line 749 
                             cuser, chost, key);                              cuser, chost, key);
                         break;                          break;
                 default:                  default:
                         fatal("%s: unknown key type %d", __FUNCTION__, type);                          fatal("%s: unknown key type %d", __func__, type);
                         break;                          break;
                 }                  }
                 key_free(key);                  key_free(key);
Line 768 
Line 768 
         }          }
   
         debug3("%s: key %p is %s",          debug3("%s: key %p is %s",
             __FUNCTION__, key, allowed ? "allowed" : "disallowed");              __func__, key, allowed ? "allowed" : "disallowed");
   
         buffer_clear(m);          buffer_clear(m);
         buffer_put_int(m, allowed);          buffer_put_int(m, allowed);
Line 910 
Line 910 
   
         if (hostbased_cuser == NULL || hostbased_chost == NULL ||          if (hostbased_cuser == NULL || hostbased_chost == NULL ||
           !monitor_allowed_key(blob, bloblen))            !monitor_allowed_key(blob, bloblen))
                 fatal("%s: bad key, not previously allowed", __FUNCTION__);                  fatal("%s: bad key, not previously allowed", __func__);
   
         key = key_from_blob(blob, bloblen);          key = key_from_blob(blob, bloblen);
         if (key == NULL)          if (key == NULL)
                 fatal("%s: bad public key blob", __FUNCTION__);                  fatal("%s: bad public key blob", __func__);
   
         switch (key_blobtype) {          switch (key_blobtype) {
         case MM_USERKEY:          case MM_USERKEY:
Line 929 
Line 929 
                 break;                  break;
         }          }
         if (!valid_data)          if (!valid_data)
                 fatal("%s: bad signature data blob", __FUNCTION__);                  fatal("%s: bad signature data blob", __func__);
   
         verified = key_verify(key, signature, signaturelen, data, datalen);          verified = key_verify(key, signature, signaturelen, data, datalen);
         debug3("%s: key %p signature %s",          debug3("%s: key %p signature %s",
             __FUNCTION__, key, verified ? "verified" : "unverified");              __func__, key, verified ? "verified" : "unverified");
   
         key_free(key);          key_free(key);
         xfree(blob);          xfree(blob);
Line 979 
Line 979 
 static void  static void
 mm_session_close(Session *s)  mm_session_close(Session *s)
 {  {
         debug3("%s: session %d pid %d", __FUNCTION__, s->self, s->pid);          debug3("%s: session %d pid %d", __func__, s->self, s->pid);
         if (s->ttyfd != -1) {          if (s->ttyfd != -1) {
                 debug3("%s: tty %s ptyfd %d",  __FUNCTION__, s->tty, s->ptyfd);                  debug3("%s: tty %s ptyfd %d",  __func__, s->tty, s->ptyfd);
                 fatal_remove_cleanup(session_pty_cleanup2, (void *)s);                  fatal_remove_cleanup(session_pty_cleanup2, (void *)s);
                 session_pty_cleanup2(s);                  session_pty_cleanup2(s);
         }          }
Line 995 
Line 995 
         Session *s;          Session *s;
         int res, fd0;          int res, fd0;
   
         debug3("%s entering", __FUNCTION__);          debug3("%s entering", __func__);
   
         buffer_clear(m);          buffer_clear(m);
         s = session_new();          s = session_new();
Line 1019 
Line 1019 
   
         /* We need to trick ttyslot */          /* We need to trick ttyslot */
         if (dup2(s->ttyfd, 0) == -1)          if (dup2(s->ttyfd, 0) == -1)
                 fatal("%s: dup2", __FUNCTION__);                  fatal("%s: dup2", __func__);
   
         mm_record_login(s, authctxt->pw);          mm_record_login(s, authctxt->pw);
   
Line 1028 
Line 1028 
   
         /* make sure nothing uses fd 0 */          /* make sure nothing uses fd 0 */
         if ((fd0 = open(_PATH_DEVNULL, O_RDONLY)) < 0)          if ((fd0 = open(_PATH_DEVNULL, O_RDONLY)) < 0)
                 fatal("%s: open(/dev/null): %s", __FUNCTION__, strerror(errno));                  fatal("%s: open(/dev/null): %s", __func__, strerror(errno));
         if (fd0 != 0)          if (fd0 != 0)
                 error("%s: fd0 %d != 0", __FUNCTION__, fd0);                  error("%s: fd0 %d != 0", __func__, fd0);
   
         /* slave is not needed */          /* slave is not needed */
         close(s->ttyfd);          close(s->ttyfd);
Line 1038 
Line 1038 
         /* no need to dup() because nobody closes ptyfd */          /* no need to dup() because nobody closes ptyfd */
         s->ptymaster = s->ptyfd;          s->ptymaster = s->ptyfd;
   
         debug3("%s: tty %s ptyfd %d",  __FUNCTION__, s->tty, s->ttyfd);          debug3("%s: tty %s ptyfd %d",  __func__, s->tty, s->ttyfd);
   
         return (0);          return (0);
   
Line 1056 
Line 1056 
         Session *s;          Session *s;
         char *tty;          char *tty;
   
         debug3("%s entering", __FUNCTION__);          debug3("%s entering", __func__);
   
         tty = buffer_get_string(m, NULL);          tty = buffer_get_string(m, NULL);
         if ((s = session_by_tty(tty)) != NULL)          if ((s = session_by_tty(tty)) != NULL)
Line 1076 
Line 1076 
         monitor_permit(mon_dispatch, MONITOR_REQ_SESSKEY, 1);          monitor_permit(mon_dispatch, MONITOR_REQ_SESSKEY, 1);
   
         if ((p = BN_new()) == NULL)          if ((p = BN_new()) == NULL)
                 fatal("%s: BN_new", __FUNCTION__);                  fatal("%s: BN_new", __func__);
   
         buffer_get_bignum2(m, p);          buffer_get_bignum2(m, p);
   
Line 1101 
Line 1101 
 {  {
         int i;          int i;
   
         debug3("%s entering", __FUNCTION__);          debug3("%s entering", __func__);
   
         if (buffer_len(m) != 16)          if (buffer_len(m) != 16)
                 fatal("%s: bad ssh1 session id", __FUNCTION__);                  fatal("%s: bad ssh1 session id", __func__);
         for (i = 0; i < 16; i++)          for (i = 0; i < 16; i++)
                 session_id[i] = buffer_get_char(m);                  session_id[i] = buffer_get_char(m);
   
Line 1123 
Line 1123 
         u_int blen = 0;          u_int blen = 0;
         int allowed = 0;          int allowed = 0;
   
         debug3("%s entering", __FUNCTION__);          debug3("%s entering", __func__);
   
         if (options.rsa_authentication && authctxt->valid) {          if (options.rsa_authentication && authctxt->valid) {
                 if ((client_n = BN_new()) == NULL)                  if ((client_n = BN_new()) == NULL)
                         fatal("%s: BN_new", __FUNCTION__);                          fatal("%s: BN_new", __func__);
                 buffer_get_bignum2(m, client_n);                  buffer_get_bignum2(m, client_n);
                 allowed = auth_rsa_key_allowed(authctxt->pw, client_n, &key);                  allowed = auth_rsa_key_allowed(authctxt->pw, client_n, &key);
                 BN_clear_free(client_n);                  BN_clear_free(client_n);
Line 1141 
Line 1141 
         if (allowed && key != NULL) {          if (allowed && key != NULL) {
                 key->type = KEY_RSA;    /* cheat for key_to_blob */                  key->type = KEY_RSA;    /* cheat for key_to_blob */
                 if (key_to_blob(key, &blob, &blen) == 0)                  if (key_to_blob(key, &blob, &blen) == 0)
                         fatal("%s: key_to_blob failed", __FUNCTION__);                          fatal("%s: key_to_blob failed", __func__);
                 buffer_put_string(m, blob, blen);                  buffer_put_string(m, blob, blen);
   
                 /* Save temporarily for comparison in verify */                  /* Save temporarily for comparison in verify */
Line 1167 
Line 1167 
         u_char *blob;          u_char *blob;
         u_int blen;          u_int blen;
   
         debug3("%s entering", __FUNCTION__);          debug3("%s entering", __func__);
   
         if (!authctxt->valid)          if (!authctxt->valid)
                 fatal("%s: authctxt not valid", __FUNCTION__);                  fatal("%s: authctxt not valid", __func__);
         blob = buffer_get_string(m, &blen);          blob = buffer_get_string(m, &blen);
         if (!monitor_allowed_key(blob, blen))          if (!monitor_allowed_key(blob, blen))
                 fatal("%s: bad key, not previously allowed", __FUNCTION__);                  fatal("%s: bad key, not previously allowed", __func__);
         if (key_blobtype != MM_RSAUSERKEY && key_blobtype != MM_RSAHOSTKEY)          if (key_blobtype != MM_RSAUSERKEY && key_blobtype != MM_RSAHOSTKEY)
                 fatal("%s: key type mismatch", __FUNCTION__);                  fatal("%s: key type mismatch", __func__);
         if ((key = key_from_blob(blob, blen)) == NULL)          if ((key = key_from_blob(blob, blen)) == NULL)
                 fatal("%s: received bad key", __FUNCTION__);                  fatal("%s: received bad key", __func__);
   
         if (ssh1_challenge)          if (ssh1_challenge)
                 BN_clear_free(ssh1_challenge);                  BN_clear_free(ssh1_challenge);
Line 1186 
Line 1186 
         buffer_clear(m);          buffer_clear(m);
         buffer_put_bignum2(m, ssh1_challenge);          buffer_put_bignum2(m, ssh1_challenge);
   
         debug3("%s sending reply", __FUNCTION__);          debug3("%s sending reply", __func__);
         mm_request_send(socket, MONITOR_ANS_RSACHALLENGE, m);          mm_request_send(socket, MONITOR_ANS_RSACHALLENGE, m);
   
         monitor_permit(mon_dispatch, MONITOR_REQ_RSARESPONSE, 1);          monitor_permit(mon_dispatch, MONITOR_REQ_RSARESPONSE, 1);
Line 1201 
Line 1201 
         u_int blen, len;          u_int blen, len;
         int success;          int success;
   
         debug3("%s entering", __FUNCTION__);          debug3("%s entering", __func__);
   
         if (!authctxt->valid)          if (!authctxt->valid)
                 fatal("%s: authctxt not valid", __FUNCTION__);                  fatal("%s: authctxt not valid", __func__);
         if (ssh1_challenge == NULL)          if (ssh1_challenge == NULL)
                 fatal("%s: no ssh1_challenge", __FUNCTION__);                  fatal("%s: no ssh1_challenge", __func__);
   
         blob = buffer_get_string(m, &blen);          blob = buffer_get_string(m, &blen);
         if (!monitor_allowed_key(blob, blen))          if (!monitor_allowed_key(blob, blen))
                 fatal("%s: bad key, not previously allowed", __FUNCTION__);                  fatal("%s: bad key, not previously allowed", __func__);
         if (key_blobtype != MM_RSAUSERKEY && key_blobtype != MM_RSAHOSTKEY)          if (key_blobtype != MM_RSAUSERKEY && key_blobtype != MM_RSAHOSTKEY)
                 fatal("%s: key type mismatch: %d", __FUNCTION__, key_blobtype);                  fatal("%s: key type mismatch: %d", __func__, key_blobtype);
         if ((key = key_from_blob(blob, blen)) == NULL)          if ((key = key_from_blob(blob, blen)) == NULL)
                 fatal("%s: received bad key", __FUNCTION__);                  fatal("%s: received bad key", __func__);
         response = buffer_get_string(m, &len);          response = buffer_get_string(m, &len);
         if (len != 16)          if (len != 16)
                 fatal("%s: received bad response to challenge", __FUNCTION__);                  fatal("%s: received bad response to challenge", __func__);
         success = auth_rsa_verify_response(key, ssh1_challenge, response);          success = auth_rsa_verify_response(key, ssh1_challenge, response);
   
         key_free(key);          key_free(key);
Line 1243 
Line 1243 
         extern struct monitor *pmonitor;          extern struct monitor *pmonitor;
         int res, status;          int res, status;
   
         debug3("%s: tearing down sessions", __FUNCTION__);          debug3("%s: tearing down sessions", __func__);
   
         /* The child is terminating */          /* The child is terminating */
         session_destroy_all(&mm_session_close);          session_destroy_all(&mm_session_close);
Line 1351 
Line 1351 
         u_char *blob, *p;          u_char *blob, *p;
         u_int bloblen, plen;          u_int bloblen, plen;
   
         debug3("%s: Waiting for new keys", __FUNCTION__);          debug3("%s: Waiting for new keys", __func__);
   
         buffer_init(&m);          buffer_init(&m);
         mm_request_receive_expect(pmonitor->m_sendfd, MONITOR_REQ_KEYEXPORT, &m);          mm_request_receive_expect(pmonitor->m_sendfd, MONITOR_REQ_KEYEXPORT, &m);
Line 1371 
Line 1371 
         current_keys[MODE_OUT] = mm_newkeys_from_blob(blob, bloblen);          current_keys[MODE_OUT] = mm_newkeys_from_blob(blob, bloblen);
         xfree(blob);          xfree(blob);
   
         debug3("%s: Waiting for second key", __FUNCTION__);          debug3("%s: Waiting for second key", __func__);
         blob = buffer_get_string(&m, &bloblen);          blob = buffer_get_string(&m, &bloblen);
         current_keys[MODE_IN] = mm_newkeys_from_blob(blob, bloblen);          current_keys[MODE_IN] = mm_newkeys_from_blob(blob, bloblen);
         xfree(blob);          xfree(blob);
Line 1385 
Line 1385 
         child_state.keyout = buffer_get_string(&m, &child_state.keyoutlen);          child_state.keyout = buffer_get_string(&m, &child_state.keyoutlen);
         child_state.keyin  = buffer_get_string(&m, &child_state.keyinlen);          child_state.keyin  = buffer_get_string(&m, &child_state.keyinlen);
   
         debug3("%s: Getting compression state", __FUNCTION__);          debug3("%s: Getting compression state", __func__);
         /* Get compression state */          /* Get compression state */
         p = buffer_get_string(&m, &plen);          p = buffer_get_string(&m, &plen);
         if (plen != sizeof(child_state.outgoing))          if (plen != sizeof(child_state.outgoing))
                 fatal("%s: bad request size", __FUNCTION__);                  fatal("%s: bad request size", __func__);
         memcpy(&child_state.outgoing, p, sizeof(child_state.outgoing));          memcpy(&child_state.outgoing, p, sizeof(child_state.outgoing));
         xfree(p);          xfree(p);
   
         p = buffer_get_string(&m, &plen);          p = buffer_get_string(&m, &plen);
         if (plen != sizeof(child_state.incoming))          if (plen != sizeof(child_state.incoming))
                 fatal("%s: bad request size", __FUNCTION__);                  fatal("%s: bad request size", __func__);
         memcpy(&child_state.incoming, p, sizeof(child_state.incoming));          memcpy(&child_state.incoming, p, sizeof(child_state.incoming));
         xfree(p);          xfree(p);
   
         /* Network I/O buffers */          /* Network I/O buffers */
         debug3("%s: Getting Network I/O buffers", __FUNCTION__);          debug3("%s: Getting Network I/O buffers", __func__);
         child_state.input = buffer_get_string(&m, &child_state.ilen);          child_state.input = buffer_get_string(&m, &child_state.ilen);
         child_state.output = buffer_get_string(&m, &child_state.olen);          child_state.output = buffer_get_string(&m, &child_state.olen);
   
Line 1448 
Line 1448 
 monitor_socketpair(int *pair)  monitor_socketpair(int *pair)
 {  {
         if (socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1)          if (socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1)
                 fatal("%s: socketpair", __FUNCTION__);                  fatal("%s: socketpair", __func__);
         FD_CLOSEONEXEC(pair[0]);          FD_CLOSEONEXEC(pair[0]);
         FD_CLOSEONEXEC(pair[1]);          FD_CLOSEONEXEC(pair[1]);
 }  }

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.14