Diff

Differences From Artifact [24e9c63e06]:

To Artifact [17d0315884]:


366
367
368
369
370
371
372




373
374
375
376
377
378
379

    pktout = sftp_pkt_init(SSH_FXP_REALPATH);
    sftp_pkt_adduint32(pktout, 0x123); /* request id */
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_str(pktout, path);
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0x123) {
	fxp_internal_error("request ID mismatch\n");
	return NULL;
    }
    if (pktin->type == SSH_FXP_NAME) {
	int count;







>
>
>
>







366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383

    pktout = sftp_pkt_init(SSH_FXP_REALPATH);
    sftp_pkt_adduint32(pktout, 0x123); /* request id */
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_str(pktout, path);
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return NULL;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0x123) {
	fxp_internal_error("request ID mismatch\n");
	return NULL;
    }
    if (pktin->type == SSH_FXP_NAME) {
	int count;
410
411
412
413
414
415
416




417
418
419
420
421
422
423
    pktout = sftp_pkt_init(SSH_FXP_OPEN);
    sftp_pkt_adduint32(pktout, 0x567); /* request id */
    sftp_pkt_addstring(pktout, path);
    sftp_pkt_adduint32(pktout, type);
    sftp_pkt_adduint32(pktout, 0);     /* (FIXME) empty ATTRS structure */
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0x567) {
	fxp_internal_error("request ID mismatch\n");
	return NULL;
    }
    if (pktin->type == SSH_FXP_HANDLE) {
	char *hstring;







>
>
>
>







414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
    pktout = sftp_pkt_init(SSH_FXP_OPEN);
    sftp_pkt_adduint32(pktout, 0x567); /* request id */
    sftp_pkt_addstring(pktout, path);
    sftp_pkt_adduint32(pktout, type);
    sftp_pkt_adduint32(pktout, 0);     /* (FIXME) empty ATTRS structure */
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return NULL;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0x567) {
	fxp_internal_error("request ID mismatch\n");
	return NULL;
    }
    if (pktin->type == SSH_FXP_HANDLE) {
	char *hstring;
449
450
451
452
453
454
455




456
457
458
459
460
461
462
    int id;

    pktout = sftp_pkt_init(SSH_FXP_OPENDIR);
    sftp_pkt_adduint32(pktout, 0x456); /* request id */
    sftp_pkt_addstring(pktout, path);
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0x456) {
	fxp_internal_error("request ID mismatch\n");
	return NULL;
    }
    if (pktin->type == SSH_FXP_HANDLE) {
	char *hstring;







>
>
>
>







457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
    int id;

    pktout = sftp_pkt_init(SSH_FXP_OPENDIR);
    sftp_pkt_adduint32(pktout, 0x456); /* request id */
    sftp_pkt_addstring(pktout, path);
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return NULL;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0x456) {
	fxp_internal_error("request ID mismatch\n");
	return NULL;
    }
    if (pktin->type == SSH_FXP_HANDLE) {
	char *hstring;
489
490
491
492
493
494
495




496
497
498
499
500
501
502

    pktout = sftp_pkt_init(SSH_FXP_CLOSE);
    sftp_pkt_adduint32(pktout, 0x789); /* request id */
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0x789) {
	fxp_internal_error("request ID mismatch\n");
	return;
    }
    fxp_got_status(pktin);
    sfree(handle->hstring);







>
>
>
>







501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518

    pktout = sftp_pkt_init(SSH_FXP_CLOSE);
    sftp_pkt_adduint32(pktout, 0x789); /* request id */
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0x789) {
	fxp_internal_error("request ID mismatch\n");
	return;
    }
    fxp_got_status(pktin);
    sfree(handle->hstring);
510
511
512
513
514
515
516




517
518
519
520
521
522
523

    pktout = sftp_pkt_init(SSH_FXP_MKDIR);
    sftp_pkt_adduint32(pktout, 0x234); /* request id */
    sftp_pkt_addstring(pktout, path);
    sftp_pkt_adduint32(pktout, 0);     /* (FIXME) empty ATTRS structure */
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0x234) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    id = fxp_got_status(pktin);
    if (id != 1) {







>
>
>
>







526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543

    pktout = sftp_pkt_init(SSH_FXP_MKDIR);
    sftp_pkt_adduint32(pktout, 0x234); /* request id */
    sftp_pkt_addstring(pktout, path);
    sftp_pkt_adduint32(pktout, 0);     /* (FIXME) empty ATTRS structure */
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return 0;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0x234) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    id = fxp_got_status(pktin);
    if (id != 1) {
532
533
534
535
536
537
538




539
540
541
542
543
544
545
    int id;

    pktout = sftp_pkt_init(SSH_FXP_RMDIR);
    sftp_pkt_adduint32(pktout, 0x345); /* request id */
    sftp_pkt_addstring(pktout, path);
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0x345) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    id = fxp_got_status(pktin);
    if (id != 1) {







>
>
>
>







552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
    int id;

    pktout = sftp_pkt_init(SSH_FXP_RMDIR);
    sftp_pkt_adduint32(pktout, 0x345); /* request id */
    sftp_pkt_addstring(pktout, path);
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return 0;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0x345) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    id = fxp_got_status(pktin);
    if (id != 1) {
554
555
556
557
558
559
560




561
562
563
564
565
566
567
    int id;

    pktout = sftp_pkt_init(SSH_FXP_REMOVE);
    sftp_pkt_adduint32(pktout, 0x678); /* request id */
    sftp_pkt_addstring(pktout, fname);
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0x678) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    id = fxp_got_status(pktin);
    if (id != 1) {







>
>
>
>







578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
    int id;

    pktout = sftp_pkt_init(SSH_FXP_REMOVE);
    sftp_pkt_adduint32(pktout, 0x678); /* request id */
    sftp_pkt_addstring(pktout, fname);
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return 0;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0x678) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    id = fxp_got_status(pktin);
    if (id != 1) {
577
578
579
580
581
582
583




584
585
586
587
588
589
590

    pktout = sftp_pkt_init(SSH_FXP_RENAME);
    sftp_pkt_adduint32(pktout, 0x678); /* request id */
    sftp_pkt_addstring(pktout, srcfname);
    sftp_pkt_addstring(pktout, dstfname);
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0x678) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    id = fxp_got_status(pktin);
    if (id != 1) {







>
>
>
>







605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622

    pktout = sftp_pkt_init(SSH_FXP_RENAME);
    sftp_pkt_adduint32(pktout, 0x678); /* request id */
    sftp_pkt_addstring(pktout, srcfname);
    sftp_pkt_addstring(pktout, dstfname);
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return 0;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0x678) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    id = fxp_got_status(pktin);
    if (id != 1) {
603
604
605
606
607
608
609




610
611
612
613
614
615
616
    int id;

    pktout = sftp_pkt_init(SSH_FXP_STAT);
    sftp_pkt_adduint32(pktout, 0x678); /* request id */
    sftp_pkt_addstring(pktout, fname);
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0x678) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }

    if (pktin->type == SSH_FXP_ATTRS) {







>
>
>
>







635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
    int id;

    pktout = sftp_pkt_init(SSH_FXP_STAT);
    sftp_pkt_adduint32(pktout, 0x678); /* request id */
    sftp_pkt_addstring(pktout, fname);
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return 0;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0x678) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }

    if (pktin->type == SSH_FXP_ATTRS) {
629
630
631
632
633
634
635




636
637
638
639
640
641
642

    pktout = sftp_pkt_init(SSH_FXP_FSTAT);
    sftp_pkt_adduint32(pktout, 0x678); /* request id */
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0x678) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }

    if (pktin->type == SSH_FXP_ATTRS) {







>
>
>
>







665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682

    pktout = sftp_pkt_init(SSH_FXP_FSTAT);
    sftp_pkt_adduint32(pktout, 0x678); /* request id */
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return 0;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0x678) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }

    if (pktin->type == SSH_FXP_ATTRS) {
658
659
660
661
662
663
664




665
666
667
668
669
670
671

    pktout = sftp_pkt_init(SSH_FXP_SETSTAT);
    sftp_pkt_adduint32(pktout, 0x678); /* request id */
    sftp_pkt_addstring(pktout, fname);
    sftp_pkt_addattrs(pktout, attrs);
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0x678) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    id = fxp_got_status(pktin);
    if (id != 1) {







>
>
>
>







698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715

    pktout = sftp_pkt_init(SSH_FXP_SETSTAT);
    sftp_pkt_adduint32(pktout, 0x678); /* request id */
    sftp_pkt_addstring(pktout, fname);
    sftp_pkt_addattrs(pktout, attrs);
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return 0;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0x678) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    id = fxp_got_status(pktin);
    if (id != 1) {
681
682
683
684
685
686
687




688
689
690
691
692
693
694
    pktout = sftp_pkt_init(SSH_FXP_FSETSTAT);
    sftp_pkt_adduint32(pktout, 0x678); /* request id */
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
    sftp_pkt_addattrs(pktout, attrs);
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0x678) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    id = fxp_got_status(pktin);
    if (id != 1) {







>
>
>
>







725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
    pktout = sftp_pkt_init(SSH_FXP_FSETSTAT);
    sftp_pkt_adduint32(pktout, 0x678); /* request id */
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
    sftp_pkt_addattrs(pktout, attrs);
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return 0;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0x678) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    id = fxp_got_status(pktin);
    if (id != 1) {
713
714
715
716
717
718
719




720
721
722
723
724
725
726
    sftp_pkt_adduint32(pktout, 0xBCD); /* request id */
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
    sftp_pkt_adduint64(pktout, offset);
    sftp_pkt_adduint32(pktout, len);
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0xBCD) {
	fxp_internal_error("request ID mismatch");
	return -1;
    }
    if (pktin->type == SSH_FXP_DATA) {
	char *str;







>
>
>
>







761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
    sftp_pkt_adduint32(pktout, 0xBCD); /* request id */
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
    sftp_pkt_adduint64(pktout, offset);
    sftp_pkt_adduint32(pktout, len);
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return -1;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0xBCD) {
	fxp_internal_error("request ID mismatch");
	return -1;
    }
    if (pktin->type == SSH_FXP_DATA) {
	char *str;
752
753
754
755
756
757
758




759
760
761
762
763
764
765

    pktout = sftp_pkt_init(SSH_FXP_READDIR);
    sftp_pkt_adduint32(pktout, 0xABC); /* request id */
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0xABC) {
	fxp_internal_error("request ID mismatch\n");
	return NULL;
    }
    if (pktin->type == SSH_FXP_NAME) {
	struct fxp_names *ret;







>
>
>
>







804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821

    pktout = sftp_pkt_init(SSH_FXP_READDIR);
    sftp_pkt_adduint32(pktout, 0xABC); /* request id */
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return NULL;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0xABC) {
	fxp_internal_error("request ID mismatch\n");
	return NULL;
    }
    if (pktin->type == SSH_FXP_NAME) {
	struct fxp_names *ret;
797
798
799
800
801
802
803




804
805
806
807
808
809
810
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
    sftp_pkt_adduint64(pktout, offset);
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, buffer, len);
    sftp_send(pktout);
    pktin = sftp_recv();




    id = sftp_pkt_getuint32(pktin);
    if (id != 0xDCB) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    fxp_got_status(pktin);
    return fxp_errtype == SSH_FX_OK;







>
>
>
>







853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, handle->hstring, handle->hlen);
    sftp_pkt_adduint64(pktout, offset);
    sftp_pkt_addstring_start(pktout);
    sftp_pkt_addstring_data(pktout, buffer, len);
    sftp_send(pktout);
    pktin = sftp_recv();
    if (!pktin) {
	fxp_internal_error("did not receive a valid SFTP packet\n");
	return 0;
    }
    id = sftp_pkt_getuint32(pktin);
    if (id != 0xDCB) {
	fxp_internal_error("request ID mismatch\n");
	return 0;
    }
    fxp_got_status(pktin);
    return fxp_errtype == SSH_FX_OK;