diff options
author | epoch <epoch@hacking.allowed.org> | 2019-04-20 05:32:27 -0500 |
---|---|---|
committer | epoch <epoch@hacking.allowed.org> | 2019-04-20 05:32:27 -0500 |
commit | 6f402e2d2f052972886712f60d592684c8671982 (patch) | |
tree | 47a09324bd3c5e577ec5b7059bd6c8834bead115 /cuturl.c | |
parent | d42135919f480c8bba4ca1f043fbabf44dac708f (diff) | |
download | uritools-6f402e2d2f052972886712f60d592684c8671982.tar.gz uritools-6f402e2d2f052972886712f60d592684c8671982.zip |
rebased on an old copy of this repo. renamed everything. rewrote the uri parser. added uricmp. wew.
Diffstat (limited to 'cuturl.c')
-rw-r--r-- | cuturl.c | 202 |
1 files changed, 0 insertions, 202 deletions
diff --git a/cuturl.c b/cuturl.c deleted file mode 100644 index f1cbf42..0000000 --- a/cuturl.c +++ /dev/null @@ -1,202 +0,0 @@ -#include <netdb.h> -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <errno.h> -#include <unistd.h> -#include <sys/wait.h> - -#include "url.h" - -#define MAGIC - -/* - schemes are case sensitive but cononicals are lower case. - domain is case insensitive. return it lowercased? - port is optional and in decimal - path - scheme://username:password@domain:port/path?query_string#fragment_id - mailto:username@domain - - optional stuff: - scheme, username, password, port, path, query_string, fragment_id -*/ - -#define AorB(a,b) ((a)?(a):(b)) - -#define F_SCHEME 1<<0 -#define F_USERNAME 1<<1 -#define F_PASSWORD 1<<2 -#define F_DOMAIN 1<<3 -#define F_PORT 1<<4 -#define F_PATH 1<<5 -#define F_QUERY_STRING 1<<6 -#define F_FRAGMENT_ID 1<<7 -#define F_WHOLE_URL 1<<8 - -char *long_opts[]={"scheme","username","password","domain","port","path","query_string","fragment_id","URL",0}; -char *short_opts[]={"s","u","k","d","P","p","q","f","U"}; - -int main(int argc,char *argv[]) { - char *url; - char *name[2]; - char *line=0; - short args[256];//this needs to be a short to make room for the F_WHOLE_URL - int i,j,c=0; - int size=1024; - int status; - char fixme=0; - char using_stdin=1; - char malloced=0; - struct url u; - if(argc > 1) { - if(!strcmp(argv[1],"--help") || !strcmp(argv[1],"-h")) { - printf("usage: echo urls | cuturl [options]\n"); - printf("usage: cuturl [options] url [options] [url]\n\n"); - printf("options: \n"); - for(i=0;long_opts[i];i++) { - printf(" -%s|--%s\n",short_opts[i],long_opts[i]); - } - printf("To set default values use environment variables like: CUTURL_[OPTION]\n"); - return 2; - } - } - argv++; - argc--; - while(1) { - u.scheme=0; - u.username=0; - u.password=0; - u.domain=0; - u.port=0; - u.path=0; - u.query_string=0; - u.fragment_id=0; - if(!using_stdin) c=0; - if(argc >= 1) { - for(;argc>0;argc--,argv++) { - for(i=0;long_opts[i];i++) { - if(!strncmp(*argv,"--",2)) { - if(!strcmp(*argv+2,long_opts[i])) { - args[c]=1<<i; - c++; - break; - } - } - } - fixme=0; - if(**argv=='-' && argv[0][1] != '-') { - for(j=1;argv[0][j];j++) { - for(i=0;short_opts[i];i++) { - if(argv[0][j]==*short_opts[i]) { - args[c]=1<<i; - c++; - fixme=1; - } - } - } - } - if(fixme) continue; - if(long_opts[i]) continue; - //if we get here we are at data instead of flags. work on it. - line=*argv; - using_stdin=0; - argc--; - argv++; - break; - } - } - if(!argc && !line) {//if we are out of arguments and it didn't include data - using_stdin=1; - } - if(using_stdin) { - line=malloc(size+1); - malloced=1; - if(!fgets(line,size,stdin)) { - return 0; - } - } - if(!line) return 0; - for(i=0;line[i] && line[i] != '\n' && line[i] != '\r';i++); - line[i]=0; - - url=strdup(line); - urlfromline(&u,line); - - // printf("scheme://username:password@domain:port/path?query_string#fragment_id\n\n"); - //let's set them to what'll get printed now... - -#ifdef MAGIC - magic_and_defaults(&u); -/* - u.scheme=AorB(u.scheme,AorB(getenv("CUTURL_SCHEME"),"DEFAULT")); - u.username=AorB(u.username,AorB(getenv("CUTURL_USERNAME"),"DEFAULT")); - u.password=AorB(u.password,AorB(getenv("CUTURL_PASSWORD"),"DEFAULT")); - u.domain=AorB(u.domain,AorB(getenv("CURURL_DOMAIN"),"DEFAULT")); - serv=getservbyname(u.scheme,strcmp(u.scheme,"udp")?"tcp":"udp");//gets default port for the scheme. http -> 80 - if(serv) snprintf(sport,sizeof(sport)-1,"%d",ntohs(serv->s_port)); - u.port=AorB(u.port,AorB(getenv("CUTURL_PORT"),(serv?sport:"DEFAULT"))); - u.path=AorB(u.path,AorB(getenv("CUTURL_PATH"),"DEFAULT")); - u.query_string=AorB(u.query_string,AorB(getenv("CUTURL_QUERY_STRING"),"DEFAULT")); - u.fragment_id=AorB(u.fragment_id,AorB(getenv("CUTURL_FRAGMENT_ID"),"DEFAULT")); -*/ -#endif - - if((name[0]=getenv("CUTURL__"))) { - setenv("CUTURL__SCHEME",u.scheme,1); - setenv("CUTURL__USERNAME",u.username,1); - setenv("CUTURL__PASSWORD",u.password,1); - setenv("CUTURL__DOMAIN",u.domain,1); - setenv("CUTURL__PORT",u.port,1); - setenv("CUTURL__PATH",u.path,1); - setenv("CUTURL__QUERY_STRING",u.query_string,1); - setenv("CUTURL__FRAGMENT_ID",u.fragment_id,1); - name[1]=0; - switch(fork()) { - case 0: - execv(name[0],name); - perror("execv"); - return errno; - case -1: - perror("fork"); - return errno; - default: - break; - } - wait(&status); - } else { - if(c) { - for(i=0;i<c;i++) { - if(args[i]&F_SCHEME) printf("%s\n",AorB(u.scheme,"")); - if(args[i]&F_USERNAME) printf("%s\n",AorB(u.username,"")); - if(args[i]&F_PASSWORD) printf("%s\n",AorB(u.password,"")); - if(args[i]&F_DOMAIN) printf("%s\n",AorB(u.domain,"")); - if(args[i]&F_PORT) printf("%s\n",AorB(u.port,"")); - if(args[i]&F_PATH) printf("%s\n",AorB(u.path,"")); - if(args[i]&F_QUERY_STRING) printf("%s\n",AorB(u.query_string,"")); - if(args[i]&F_FRAGMENT_ID) printf("%s\n",AorB(u.fragment_id,"")); - if(args[i]&F_WHOLE_URL) printf("%s\n",url); - } - } else { - printf("scheme: %s\n",u.scheme); - printf("username: %s\n",u.username); - printf("password: %s\n",u.password); - printf("domain: %s\n",u.domain); - printf("port: %s\n",u.port); - printf("path: %s\n",u.path); - printf("query_string: %s\n",u.query_string); - printf("fragment_id: %s\n",u.fragment_id); - printf("whole_url: %s\n",url); - } - } - free(url);//this is definitely malloc()d - if(malloced) { - free(line); - malloced=0; - line=0; - } else { - line=0;//??? - } - } - return 0; -} |