/* // AUTHOR // N. Nielsen // // LICENSE // This software is in the public domain. // // The software is provided "as is", without warranty of any kind, // express or implied, including but not limited to the warranties // of merchantability, fitness for a particular purpose, and // noninfringement. In no event shall the author(s) be liable for any // claim, damages, or other liability, whether in an action of // contract, tort, or otherwise, arising from, out of, or in connection // with the software or the use or other dealings in the software. // // SUPPORT // Send bug reports to: // */ #include #include #include #include "getjail.h" #define PROC_STATUS_PATH "/proc/%d/status" int getpidjail(pid_t pid, char* buff) { int fd; size_t bytes; off_t off; /* Format the file name */ if(snprintf(buff, JAIL_BUFF_SIZE, PROC_STATUS_PATH, pid)) { /* Open the file */ if((fd = open(buff, O_RDONLY)) >= 0) { /* Seek to the last bit */ off = lseek(fd, SEEK_END, 0); if(off != -1) { off -= JAIL_BUFF_SIZE; if(off < 0) off = 0; lseek(fd, SEEK_SET, off); if((bytes = read(fd, buff, JAIL_BUFF_SIZE - 1)) > 0) { /* Okay now jailname should be the last token */ while(isspace(buff[bytes - 1])) bytes--; buff[bytes] = 0; while(!isspace(buff[bytes - 1])) bytes--; memmove(buff, buff + bytes, JAIL_BUFF_SIZE - bytes); return 0; } } } } return -1; }