[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: mount



On Tue, 19 Mar 2002 17:09:16 -0300
Armando <armando@hadrion.com.br> wrote:

> strcpy(exec,PATH);
> strcat(exec," -t smbfs ");
> strcat(exec,argv[1]);
> strcat(exec," ");
> strcat(exec,argv[2]);
> strcat(exec," -o username=");
> strcat(exec,argv[3]);

> if (strlen(exec) > sizeof(exec)){
heh, se essa condição for verdadeira o programa já segfaultou =D
alocação dinâmica seria melhor...

com a minha versão você pode usar o mount como quiser...
(claro que isso é ruim no caso de você querer que apenas
filesystems smbfs sejam montados pelo usuário, mas é muito
fácil alterar....)

a vantagem é que você pode passar quantos argumentos quiser
que o mount aceite e de qualquer tamanho... de qualquer forma,
usando o meu programa é melhor dar setuid pro mount duma vez =D:

#include <stdio.h>
#include <string.h>

#define PATH "/bin/mount"

int main(int argc, char *argv[]){

  int uid, gid;
  int i;
  char **exec;

  exec = (char**) malloc (sizeof (char*) * 2);
  exec[0] = strdup (PATH);
  exec[1] = NULL;
  for (i = 1 ; i < argc ; i++)
    {
      exec = (char**) realloc (exec, sizeof (exec) + sizeof (char*));
      exec[i] = strdup (argv[i]);
      exec[i+1] = NULL;
    }

  uid=getuid();

  gid=getgid();

  setuid(0);

  setgid(0);

  execv (exec[0], exec);

  setuid(uid);

  setgid(gid);

  return(0);

}

exemplo:

[~/prg]
[kov]@[couve] $ ls /hda6
[~/prg]
[kov]@[couve] $ ./mymnt /dev/hda6 /hda6
[~/prg]
[kov]@[couve] $ ls /hda6
media/  www/
[~/prg]
[kov]@[couve] $ 
[~/prg]
[kov]@[couve] $ ls -l mymnt
-rwsrwsr-x    1 root     root         5676 Mar 19 20:08 mymnt*

note que o programa tem memory leaks que não são importantes e que,
devido a não ser totalmente testado pode segfaultar =D
se quiser uma versão que só monte smbfs avise

e viva o software livre =D

[]s!

-- 
kov@debian.org: Gustavo Noronha <http://www.metainfo.org/kov>
Debian: <http://www.debian.org> * <http://debian-br.cipsga.org.br>



Reply to: