obtener uid de un proceso cualquiera.

Estado
No está abierto para más respuestas.

kemark

Lanero Reconocido
Se unió
9 Abr 2003
Mensajes
2,500
Ya que fue imposible dejar el mensaje de judiurco, el cual intente salvar con esta pregunta, pues posteo mi pregunta de nuevo como un nuevo tema.

Alguien sabe alguna funcion en c que me diga el uid del usuario ke este ejecutando un proceso determinado, osea que:

funcion(init o 0); // por ejemplo

me devuelva 0, ke es el uid del root.
(getuid() no me sirve por que devuelve el uid del proceso que se esta ejecutando, osea el mismo.!),

estaba pensando en usar stat (man 2 stat), y st_uid en /proc/<pid> pero me tocaria escribir la funcion, si alguien sabe de esa funcion me podria ayudar..., ya busque en unistd.h, y sys/types.h y no encontre nada, tambien la idea de usar ptrace inyectar getuid() en un punto y hacer PTRACE_DETACH ya la he tenido en cuenta.

Gracias por su posible ayuda.


Saludoz
..\..^__^............
...\.(oo)\_______....
.....(__)\*******)\/\
.........||----w |...
.........||.....||...
 

viktor

Lanero Reconocido
Se unió
14 Jul 2002
Mensajes
124
Se me ocurre que deberias pillar las sources de comando ps, pero por lo que entiendo no hay funcion que haga eso, pilla el libro Advanced linux programing. creo haber leido algo pero no recuerdo.
 

kemark

Lanero Reconocido
Se unió
9 Abr 2003
Mensajes
2,500
tengo a mi alcanze advance unix programming. para que los sources de ps?
 

viktor

Lanero Reconocido
Se unió
14 Jul 2002
Mensajes
124
Otra vez hola, bueno ps devulve la info de los procesos en ejecucion no?, creo que eso te daria una idea.

Me dio curiosidad y la funcion la verda es que no la veo por ningún lado, creo q por aqui es la cosa, esto esta en ALP, y en la salida manda el USER que ejecuta el proceso. Bueno tu debes saber mas de esto q yo y ya sabras q hacer, no es lo que tu quieres pero creo es la solucion ;). Hay va:


#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

void print_proc_arg_list(pid_t pid){
int fd;
char filename[24];
char environment[8192];
size_t length;
char* next_var;

snprintf (filename, sizeof(filename), "/proc/%d/envirom", (int) pid);
fd = open (filename, O_RDONLY);
length = read(fd, environment, sizeof(environment));
close(fd);

environment[length] = '\0';

next_var = environment;
while (next_var < environment + length) {
printf ("%s\n", next_var);
next_var += strlen(next_var) + 1;
}
}

int main(int argc, char* argv[]){
pid_t pid = (pid_t) atoi (argv[1]);
print_proc_arg_list(pid);
return 0;
}
 

jasz

Lanero Reconocido
Se unió
10 Ene 2002
Mensajes
1,295
pues, yo no me acuerdo mucho de C, pero creo que eso se podria hacer facilito con un script de shell que ejecute el "ps aux" y coja el resultado, y lo meta en un
"grep", luego saca el primer token de la linea, que es el nombre del usuario, luego hace un "id <resultado>" y ya.. estoy siendo muy iluso?

bueno, en perl seria mas facil...
 

viktor

Lanero Reconocido
Se unió
14 Jul 2002
Mensajes
124
Es absolutamente cierto lo que dices jasz, pero krawek necesita aquello.
 

t763rm3n

Lanero Reconocido
Se unió
28 Mar 2003
Mensajes
780
NO SE SI ESTO LE SIRVA ,

/*
Nombre: Obtiene Nombre de Usuarios Con Sus Respecivas uid apartir del shadow
Modificado: t763rm3n
Mail:powermagic2000@hotmail.com
Nota: La fuente de este programa no es de mi autoridad
solo lo e modificado para mi propio uso u el uso de
quien lo quiera nescesitar.
*/

struct SHADOWPW {
char *pw_name;
char *pw_passwd;
int pw_uid;
int pw_gid;

};
struct passwd *getpwent(), *getpwuid(), *getpwnam();

#ifdef elxsis


#define SHADOWPW "/etc/shadow"


#define CHANGE_TRIES 1

#endif elxsi

#define NULL 0
main()
{


printf("\n--------------t763rm3n---------------\n\n");
printf("usuario\t\tuid\t\tgid\n");

struct passwd *p;
int i;
for (;1;) {;
p=getpwent();
if (p==NULL) return;
printpw(p);

}
}

printpw(a)
struct SHADOWPW *a;
{
printf("%s\t\t%d\t\t%d\n",
a->pw_name,a->pw_uid,a->pw_gid,a);

}

INCLUI EL FICHERO , en .zip donde esta comprimido el binario y este codigo fuente :)
 

Adjuntos

[KOYO]

Lanero Reconocido
Se unió
19 Jun 2001
Mensajes
1,305
SAi seria posible, se tendria que crear una instrucion algo laraga pero resultaria
 
Se unió
12 May 2003
Mensajes
5,046
Si tiene el numero de proceso, parseelo de /proc/numero_de_proceso (todo de ahi para abajo pertenece al uid del que lo ejecuta).

Si tiene el nombre del proceso, parseelo del resultado de un popen() ejecutando:

ps -fea | awk ' { if ($8 == "init") print $1 } '

PD. Obviamente reemplaza "init" por el proceso que necesita.
 

[KOYO]

Lanero Reconocido
Se unió
19 Jun 2001
Mensajes
1,305
huyyyyy estos manes debirian participar en el concurso que gigax va hacer en Tecnocom de scripting creo que se escribe asi si no corrijan
 

jasz

Lanero Reconocido
Se unió
10 Ene 2002
Mensajes
1,295
Esto me recuerda un man de #perl en Undernet..

uno le hacia cualquier pregunta, la mas rara que se te ocurriera.. sobre perl, obviamente.. y el hp te respondia en UNA SOLA LINEA!!!!!!

La respuesta de Krieg... me le kito el sombrero, nunca he usado awk.
 

[KOYO]

Lanero Reconocido
Se unió
19 Jun 2001
Mensajes
1,305
huyyyyyyyyyyyyyyyyy HP eso si no se me ocurre
 
Estado
No está abierto para más respuestas.
Arriba