1*2810ac1bSKiyoung Kim /* 2*2810ac1bSKiyoung Kim * Unprivileged program that binds to port 80. It does this by 3*2810ac1bSKiyoung Kim * leveraging a file capable shared library. 4*2810ac1bSKiyoung Kim */ 5*2810ac1bSKiyoung Kim #include <stdio.h> 6*2810ac1bSKiyoung Kim #include <stdlib.h> 7*2810ac1bSKiyoung Kim #include <sys/types.h> 8*2810ac1bSKiyoung Kim #include <sys/socket.h> 9*2810ac1bSKiyoung Kim #include <unistd.h> 10*2810ac1bSKiyoung Kim 11*2810ac1bSKiyoung Kim #include "capso.h" 12*2810ac1bSKiyoung Kim main(int argc,char ** argv)13*2810ac1bSKiyoung Kimint main(int argc, char **argv) { 14*2810ac1bSKiyoung Kim int f = bind80("127.0.0.1"); 15*2810ac1bSKiyoung Kim if (f < 0) { 16*2810ac1bSKiyoung Kim perror("unable to bind to port 80"); 17*2810ac1bSKiyoung Kim exit(1); 18*2810ac1bSKiyoung Kim } 19*2810ac1bSKiyoung Kim if (listen(f, 10) == -1) { 20*2810ac1bSKiyoung Kim perror("unable to listen to port 80"); 21*2810ac1bSKiyoung Kim exit(1); 22*2810ac1bSKiyoung Kim } 23*2810ac1bSKiyoung Kim printf("Webserver code to use filedes = %d goes here.\n" 24*2810ac1bSKiyoung Kim "(Sleeping for 60s... Try 'netstat -tlnp|grep :80')\n", f); 25*2810ac1bSKiyoung Kim fflush(stdout); 26*2810ac1bSKiyoung Kim sleep(60); 27*2810ac1bSKiyoung Kim close(f); 28*2810ac1bSKiyoung Kim printf("Done.\n"); 29*2810ac1bSKiyoung Kim } 30