mirror of
				https://github.com/clearml/dropbear
				synced 2025-06-26 18:17:32 +00:00 
			
		
		
		
	merge of 6b56bdff53b47ae7366d93b496ce353d9e3753dc
and b68c53583ba80ad14fd0ba70ff26ea3dbd8e8823 --HG-- extra : convert_revision : 0a69485db882269664dcd5ec88e66b8ea9570855
This commit is contained in:
		
						commit
						68445e1e34
					
				
							
								
								
									
										3
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								TODO
									
									
									
									
									
								
							@ -4,9 +4,6 @@ Things which might need doing:
 | 
			
		||||
 | 
			
		||||
- Make options.h generated from configure perhaps?
 | 
			
		||||
 | 
			
		||||
- some sort of warning when blocking on random? (could be difficult,
 | 
			
		||||
  investigate alarm() perhaps)
 | 
			
		||||
 | 
			
		||||
- Improved queueing of unauthed connections
 | 
			
		||||
 | 
			
		||||
- handle /etc/environment in AIX
 | 
			
		||||
 | 
			
		||||
@ -94,7 +94,7 @@ static int cli_localtcp(unsigned int listenport, const char* remoteaddr,
 | 
			
		||||
	TRACE(("enter cli_localtcp: %d %s %d", listenport, remoteaddr,
 | 
			
		||||
				remoteport));
 | 
			
		||||
 | 
			
		||||
	tcpinfo = (struct TCPListener*)m_malloc(sizeof(struct TCPListener*));
 | 
			
		||||
	tcpinfo = (struct TCPListener*)m_malloc(sizeof(struct TCPListener));
 | 
			
		||||
	tcpinfo->sendaddr = m_strdup(remoteaddr);
 | 
			
		||||
	tcpinfo->sendport = remoteport;
 | 
			
		||||
	tcpinfo->listenport = listenport;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										19
									
								
								random.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								random.c
									
									
									
									
									
								
							@ -51,6 +51,7 @@ static void readrand(unsigned char* buf, unsigned int buflen);
 | 
			
		||||
 | 
			
		||||
static void readrand(unsigned char* buf, unsigned int buflen) {
 | 
			
		||||
 | 
			
		||||
	static int already_blocked = 0;
 | 
			
		||||
	int readfd;
 | 
			
		||||
	unsigned int readpos;
 | 
			
		||||
	int readlen;
 | 
			
		||||
@ -93,6 +94,24 @@ static void readrand(unsigned char* buf, unsigned int buflen) {
 | 
			
		||||
	/* read the actual random data */
 | 
			
		||||
	readpos = 0;
 | 
			
		||||
	do {
 | 
			
		||||
		if (!already_blocked)
 | 
			
		||||
		{
 | 
			
		||||
			int ret;
 | 
			
		||||
			struct timeval timeout;
 | 
			
		||||
			fd_set read_fds;
 | 
			
		||||
 | 
			
		||||
			timeout.tv_sec = 2; /* two seconds should be enough */
 | 
			
		||||
			timeout.tv_usec = 0;
 | 
			
		||||
 | 
			
		||||
			FD_ZERO(&read_fds);
 | 
			
		||||
			FD_SET(readfd, &read_fds);
 | 
			
		||||
			ret = select(readfd + 1, &read_fds, NULL, NULL, &timeout);
 | 
			
		||||
			if (ret == 0)
 | 
			
		||||
			{
 | 
			
		||||
				dropbear_log(LOG_INFO, "Warning: Reading the random source seems to have blocked.\nIf you experience problems, you probably need to find a better entropy source.");
 | 
			
		||||
				already_blocked = 1;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		readlen = read(readfd, &buf[readpos], buflen - readpos);
 | 
			
		||||
		if (readlen <= 0) {
 | 
			
		||||
			if (readlen < 0 && errno == EINTR) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user