Re: [PATCH 9/9] shell: Use crypt_r() in rtems_shell_login_check()

2014-11-14 Thread Joel Sherrill
Where are crypt.h and the methods coming from?

I don't see them in newlib and
On 11/14/2014 7:46 AM, Sebastian Huber wrote:
 Use '* to disable shell login instead of '!' according to the Linux man
 page.  Use getpwnam_r() instead of getpwnam().  Do not access the user
 environment directly.
 ---
  cpukit/libmisc/shell/login_check.c | 45 
 --
  testsuites/samples/fileio/init.c   | 13 +++
  2 files changed, 38 insertions(+), 20 deletions(-)

 diff --git a/cpukit/libmisc/shell/login_check.c 
 b/cpukit/libmisc/shell/login_check.c
 index 8be5be2..4b21aaf 100644
 --- a/cpukit/libmisc/shell/login_check.c
 +++ b/cpukit/libmisc/shell/login_check.c
 @@ -5,7 +5,7 @@
   */
  
  /*
 - * Copyright (c) 2009 embedded brains GmbH and others.
 + * Copyright (c) 2009-2014 embedded brains GmbH and others.
   *
   * embedded brains GmbH
   * Obere Lagerstr. 30
 @@ -30,34 +30,47 @@
  #include unistd.h
  #include pwd.h
  #include string.h
 +#include crypt.h
  
  #include rtems/shell.h
 -#include rtems/userenv.h
  
  bool rtems_shell_login_check(
const char *user,
const char *passphrase
  )
  {
 -  struct passwd *pw = getpwnam( user);
 +  char buf[256];
 +  struct passwd *pw_res;
 +  struct passwd pw;
 +  int eno;
 +
 +  eno = getpwnam_r(user, pw, buf[0], sizeof(buf), pw_res);
  
/* Valid user? */
 -  if (pw != NULL  strcmp( pw-pw_passwd, !) != 0) {
 +  if (eno == 0  strcmp(pw.pw_passwd, *) != 0) {
  rtems_shell_env_t *env = rtems_shell_get_current_env();
 -setuid( pw-pw_uid);
 -setgid( pw-pw_gid);
 -rtems_current_user_env-euid = 0;
 -rtems_current_user_env-egid = 0;
 -if (env)
 -  chown( env-devname, pw-pw_uid, 0);
 -rtems_current_user_env-euid = pw-pw_uid;
 -rtems_current_user_env-egid = pw-pw_gid;
 -if (strcmp( pw-pw_passwd, *) == 0) {
 -  /* TODO: /etc/shadow */
 +
 +if (env != NULL) {
 +  chown(env-devname, pw.pw_uid, 0);
 +}
 +
 +setuid(pw.pw_uid);
 +setgid(pw.pw_gid);
 +seteuid(pw.pw_uid);
 +setegid(pw.pw_gid);
 +
 +if (strcmp(pw.pw_passwd, ) == 0) {
return true;
 +} else if (strcmp(pw.pw_passwd, x) == 0) {
 +  /* TODO: /etc/shadow */
 +  return false;
  } else {
 -  /* TODO: crypt() */
 -  return true;
 +  struct crypt_data data;
 +  char *s;
 +
 +  s = crypt_r(passphrase, pw.pw_passwd, data);
 +
 +  return strcmp(s, pw.pw_passwd) == 0;
  }
}
  
 diff --git a/testsuites/samples/fileio/init.c 
 b/testsuites/samples/fileio/init.c
 index 2b60922..735b588 100644
 --- a/testsuites/samples/fileio/init.c
 +++ b/testsuites/samples/fileio/init.c
 @@ -13,6 +13,7 @@
  
  #define CONFIGURE_INIT
  #include system.h
 +#include crypt.h
  #include stdio.h
  #include string.h
  #include unistd.h
 @@ -641,10 +642,11 @@ static void fileio_start_shell(void)
writeFile(
  /etc/passwd,
  0644,
 -root:7QR4o148UPtb.:0:0:root::/:/bin/sh\n
 -rtems:*:1:1:RTEMS Application::/:/bin/sh\n
 -test:8Yy.AaxynxbLI:2:2:test account::/:/bin/sh\n
 -tty:!:3:3:tty owner::/:/bin/false\n
 +root:$6$$FuPOhnllx6lhW2qqlnmWvZQLJ8Thr/09I7ESTdb9VbnTOn5.65
 +  /Vh2Mqa6FoKXwT0nHS/O7F0KfrDc6Svb/sH.:0:0:root::/:/bin/sh\n
 +rtems::1:1:RTEMS Application::/:/bin/sh\n
 +test:$1$$oPu1Xt2Pw0ngIc7LyDHqu1:2:2:test account::/:/bin/sh\n
 +tty:*:3:3:tty owner::/:/bin/false\n
);
writeFile(
  /etc/group,
 @@ -1225,6 +1227,9 @@ Init (rtems_task_argument ignored)
  
TEST_BEGIN();
  
 +  crypt_add_format(crypt_md5_format);
 +  crypt_add_format(crypt_sha512_format);
 +
status = rtems_shell_wait_for_input(
  STDIN_FILENO,
  20,

-- 
Joel Sherrill, Ph.D. Director of Research  Development
joel.sherr...@oarcorp.comOn-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available(256) 722-9985

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


Re: [PATCH 9/9] shell: Use crypt_r() in rtems_shell_login_check()

2014-11-14 Thread Sebastian Huber

On 11/14/2014 03:54 PM, Joel Sherrill wrote:

Where are crypt.h and the methods coming from?

I don't see them in newlib and


It is in patch 3/9.  crypt.h is not a POSIX header file.

--
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail  : sebastian.hu...@embedded-brains.de
PGP : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel