*/
/*****************************************************************************
*
- * File myls.c: An example ls done after a chroot
+ * File mylschroot.c: An example ls done after a chroot
+ * List files and their size inside a given directory inside a chroot
*
* Author: S. Piccardi Mar. 2005
*
- * $Id$
- *
*****************************************************************************/
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h> /* directory */
-#include <stdlib.h> /* C standard library */
-#include <unistd.h>
+/*
+ * Include needed headers
+ */
+#include <sys/types.h> /* primitive system data types */
+#include <sys/stat.h> /* file characteristics constants and functions */
+#include <dirent.h> /* directory operation constants and functions */
+#include <stdlib.h> /* C standard library */
+#include <unistd.h> /* unix standard library */
#include "Gapil.h"
-/*
- * Program myls
- *
- * List files and their size inside a given directory
+
+/*
+ * Function and globals definitions
*/
-/* Help printing routine */
-void usage(void);
-/* computation function for DirScan */
-int do_ls(struct dirent * direntry);
+void usage(void); /* Help printing routine */
+int do_ls(struct dirent * direntry); /* computation function for dir_scan */
+/*
+ * Main program
+ */
int main(int argc, char *argv[])
{
int i;
+ char * arg[]={"ls","-l", NULL};
+ struct stat data;
/*
* Input section: decode command line parameters
* Use getopt function
*/
opterr = 0; /* don't want writing to stderr */
- while ( (i = getopt(argc, argv, "hs:l:wrbf")) != -1) {
+ while ( (i = getopt(argc, argv, "h")) != -1) {
switch (i) {
/*
* Handling options
printf("Wrong number of arguments %d\n", argc - optind);
usage();
}
+
printf("Chrooting to %s\n", argv[1]);
if (chroot(argv[1])) {
perror("Chroot fail");
}
- DirScan("/", do_ls);
+
+ if (execve("/ls", arg, NULL)) {
+ perror("errore in execve");
+ }
+ if (stat("/ls", &data)) {
+ perror("errore in stat");
+ } else {
+ printf("inode: %d\n", data.st_ino);
+ }
+ dir_scan("/", do_ls);
+
exit(0);
}
/*
- * Routine to print file name and size inside DirScan
+ * Routine to print file name and size inside dir_scan
*/
int do_ls(struct dirent * direntry)
{
* routine to print usage info and exit
*/
void usage(void) {
- printf("Program myls: list file in a directory \n");
+ printf("Program mylschroot: chroot in a directory and list files \n");
printf("Usage:\n");
printf(" myls [-h] dirname \n");
printf(" -h print this help\n");