Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 282653
Collapse All | Expand All

(-)dnsmasq-2.49/src/tftp.c (-18 / +18 lines)
Lines 192-211 Link Here
192
      
192
      
193
      while ((opt = next(&p, end)))
193
      while ((opt = next(&p, end)))
194
	{
194
	{
195
	  if (strcasecmp(opt, "blksize") == 0 &&
195
	  if (strcasecmp(opt, "blksize") == 0)
196
	      (opt = next(&p, end)) &&
197
	      !(daemon->options & OPT_TFTP_NOBLOCK))
198
	    {
196
	    {
199
	      transfer->blocksize = atoi(opt);
197
	      if ((opt = next(&p, end)) &&
200
	      if (transfer->blocksize < 1)
198
		  !(daemon->options & OPT_TFTP_NOBLOCK))
201
		transfer->blocksize = 1;
199
		{
202
	      if (transfer->blocksize > (unsigned)daemon->packet_buff_sz - 4)
200
		  transfer->blocksize = atoi(opt);
203
		transfer->blocksize = (unsigned)daemon->packet_buff_sz - 4;
201
		  if (transfer->blocksize < 1)
204
	      transfer->opt_blocksize = 1;
202
		    transfer->blocksize = 1;
205
	      transfer->block = 0;
203
		  if (transfer->blocksize > (unsigned)daemon->packet_buff_sz - 4)
204
		    transfer->blocksize = (unsigned)daemon->packet_buff_sz - 4;
205
		  transfer->opt_blocksize = 1;
206
		  transfer->block = 0;
207
		}
206
	    }
208
	    }
207
	  
209
	  else if (strcasecmp(opt, "tsize") == 0 && next(&p, end) && !transfer->netascii)
208
	  if (strcasecmp(opt, "tsize") == 0 && next(&p, end) && !transfer->netascii)
209
	    {
210
	    {
210
	      transfer->opt_transize = 1;
211
	      transfer->opt_transize = 1;
211
	      transfer->block = 0;
212
	      transfer->block = 0;
Lines 217-233 Link Here
217
	{
218
	{
218
	  if (daemon->tftp_prefix[0] == '/')
219
	  if (daemon->tftp_prefix[0] == '/')
219
	    daemon->namebuff[0] = 0;
220
	    daemon->namebuff[0] = 0;
220
	  strncat(daemon->namebuff, daemon->tftp_prefix, MAXDNAME);
221
	  strncat(daemon->namebuff, daemon->tftp_prefix, (MAXDNAME-1) - strlen(daemon->namebuff));
221
	  if (daemon->tftp_prefix[strlen(daemon->tftp_prefix)-1] != '/')
222
	  if (daemon->tftp_prefix[strlen(daemon->tftp_prefix)-1] != '/')
222
	    strncat(daemon->namebuff, "/", MAXDNAME);
223
	    strncat(daemon->namebuff, "/", (MAXDNAME-1) - strlen(daemon->namebuff));
223
224
224
	  if (daemon->options & OPT_TFTP_APREF)
225
	  if (daemon->options & OPT_TFTP_APREF)
225
	    {
226
	    {
226
	      size_t oldlen = strlen(daemon->namebuff);
227
	      size_t oldlen = strlen(daemon->namebuff);
227
	      struct stat statbuf;
228
	      struct stat statbuf;
228
	      
229
	      
229
	      strncat(daemon->namebuff, inet_ntoa(peer.sin_addr), MAXDNAME);
230
	      strncat(daemon->namebuff, inet_ntoa(peer.sin_addr), (MAXDNAME-1) - strlen(daemon->namebuff));
230
	      strncat(daemon->namebuff, "/", MAXDNAME);
231
	      strncat(daemon->namebuff, "/", (MAXDNAME-1) - strlen(daemon->namebuff));
231
	      
232
	      
232
	      /* remove unique-directory if it doesn't exist */
233
	      /* remove unique-directory if it doesn't exist */
233
	      if (stat(daemon->namebuff, &statbuf) == -1 || !S_ISDIR(statbuf.st_mode))
234
	      if (stat(daemon->namebuff, &statbuf) == -1 || !S_ISDIR(statbuf.st_mode))
Lines 245-252 Link Here
245
	}
246
	}
246
      else if (filename[0] == '/')
247
      else if (filename[0] == '/')
247
	daemon->namebuff[0] = 0;
248
	daemon->namebuff[0] = 0;
248
      strncat(daemon->namebuff, filename, MAXDNAME);
249
      strncat(daemon->namebuff, filename, (MAXDNAME-1) - strlen(daemon->namebuff));
249
      daemon->namebuff[MAXDNAME-1] = 0;
250
250
251
      /* check permissions and open file */
251
      /* check permissions and open file */
252
      if ((transfer->file = check_tftp_fileperm(&len)))
252
      if ((transfer->file = check_tftp_fileperm(&len)))

Return to bug 282653