smbfs_vnops.c (586ee69f09c5060621486b34722a4a806581f93d) smbfs_vnops.c (b4a58fbf640409a1e507d9f7b411c83a3f83a2f3)
1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2000-2001 Boris Popov
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 546 unchanged lines hidden (view full) ---

555
556 SMBVDEBUG("\n");
557 *vpp = NULL;
558 if (vap->va_type != VREG)
559 return EOPNOTSUPP;
560 if ((error = VOP_GETATTR(dvp, &vattr, cnp->cn_cred)))
561 return error;
562 scred = smbfs_malloc_scred();
1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2000-2001 Boris Popov
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 546 unchanged lines hidden (view full) ---

555
556 SMBVDEBUG("\n");
557 *vpp = NULL;
558 if (vap->va_type != VREG)
559 return EOPNOTSUPP;
560 if ((error = VOP_GETATTR(dvp, &vattr, cnp->cn_cred)))
561 return error;
562 scred = smbfs_malloc_scred();
563 smb_makescred(scred, cnp->cn_thread, cnp->cn_cred);
563 smb_makescred(scred, curthread, cnp->cn_cred);
564
565 error = smbfs_smb_create(dnp, name, nmlen, scred);
566 if (error)
567 goto out;
568 error = smbfs_smb_lookup(dnp, name, nmlen, &fattr, scred);
569 if (error)
570 goto out;
571 error = smbfs_nget(VTOVFS(dvp), dvp, name, nmlen, &fattr, &vp);

--- 21 unchanged lines hidden (view full) ---

593 struct componentname *cnp = ap->a_cnp;
594 struct smbnode *np = VTOSMB(vp);
595 struct smb_cred *scred;
596 int error;
597
598 if (vp->v_type == VDIR || (np->n_flag & NOPEN) != 0 || vrefcnt(vp) != 1)
599 return EPERM;
600 scred = smbfs_malloc_scred();
564
565 error = smbfs_smb_create(dnp, name, nmlen, scred);
566 if (error)
567 goto out;
568 error = smbfs_smb_lookup(dnp, name, nmlen, &fattr, scred);
569 if (error)
570 goto out;
571 error = smbfs_nget(VTOVFS(dvp), dvp, name, nmlen, &fattr, &vp);

--- 21 unchanged lines hidden (view full) ---

593 struct componentname *cnp = ap->a_cnp;
594 struct smbnode *np = VTOSMB(vp);
595 struct smb_cred *scred;
596 int error;
597
598 if (vp->v_type == VDIR || (np->n_flag & NOPEN) != 0 || vrefcnt(vp) != 1)
599 return EPERM;
600 scred = smbfs_malloc_scred();
601 smb_makescred(scred, cnp->cn_thread, cnp->cn_cred);
601 smb_makescred(scred, curthread, cnp->cn_cred);
602 error = smbfs_smb_delete(np, scred);
603 if (error == 0)
604 np->n_flag |= NGONE;
605 cache_purge(vp);
606 smbfs_free_scred(scred);
607 return error;
608}
609

--- 37 unchanged lines hidden (view full) ---

647 if (fvp->v_type == VDIR) {
648 flags |= 2;
649 } else if (fvp->v_type == VREG) {
650 flags |= 1;
651 } else {
652 return EINVAL;
653 }
654 scred = smbfs_malloc_scred();
602 error = smbfs_smb_delete(np, scred);
603 if (error == 0)
604 np->n_flag |= NGONE;
605 cache_purge(vp);
606 smbfs_free_scred(scred);
607 return error;
608}
609

--- 37 unchanged lines hidden (view full) ---

647 if (fvp->v_type == VDIR) {
648 flags |= 2;
649 } else if (fvp->v_type == VREG) {
650 flags |= 1;
651 } else {
652 return EINVAL;
653 }
654 scred = smbfs_malloc_scred();
655 smb_makescred(scred, tcnp->cn_thread, tcnp->cn_cred);
655 smb_makescred(scred, curthread, tcnp->cn_cred);
656 /*
657 * It seems that Samba doesn't implement SMB_COM_MOVE call...
658 */
659#ifdef notnow
660 if (SMB_DIALECT(SSTOCN(smp->sm_share)) >= SMB_DIALECT_LANMAN1_0) {
661 error = smbfs_smb_move(VTOSMB(fvp), VTOSMB(tdvp),
662 tcnp->cn_nameptr, tcnp->cn_namelen, flags, scred);
663 } else

--- 100 unchanged lines hidden (view full) ---

764 int error;
765
766 if ((error = VOP_GETATTR(dvp, &vattr, cnp->cn_cred))) {
767 return error;
768 }
769 if ((name[0] == '.') && ((len == 1) || ((len == 2) && (name[1] == '.'))))
770 return EEXIST;
771 scred = smbfs_malloc_scred();
656 /*
657 * It seems that Samba doesn't implement SMB_COM_MOVE call...
658 */
659#ifdef notnow
660 if (SMB_DIALECT(SSTOCN(smp->sm_share)) >= SMB_DIALECT_LANMAN1_0) {
661 error = smbfs_smb_move(VTOSMB(fvp), VTOSMB(tdvp),
662 tcnp->cn_nameptr, tcnp->cn_namelen, flags, scred);
663 } else

--- 100 unchanged lines hidden (view full) ---

764 int error;
765
766 if ((error = VOP_GETATTR(dvp, &vattr, cnp->cn_cred))) {
767 return error;
768 }
769 if ((name[0] == '.') && ((len == 1) || ((len == 2) && (name[1] == '.'))))
770 return EEXIST;
771 scred = smbfs_malloc_scred();
772 smb_makescred(scred, cnp->cn_thread, cnp->cn_cred);
772 smb_makescred(scred, curthread, cnp->cn_cred);
773 error = smbfs_smb_mkdir(dnp, name, len, scred);
774 if (error)
775 goto out;
776 error = smbfs_smb_lookup(dnp, name, len, &fattr, scred);
777 if (error)
778 goto out;
779 error = smbfs_nget(VTOVFS(dvp), dvp, name, len, &fattr, &vp);
780 if (error)

--- 23 unchanged lines hidden (view full) ---

804 struct smbnode *np = VTOSMB(vp);
805 struct smb_cred *scred;
806 int error;
807
808 if (dvp == vp)
809 return EINVAL;
810
811 scred = smbfs_malloc_scred();
773 error = smbfs_smb_mkdir(dnp, name, len, scred);
774 if (error)
775 goto out;
776 error = smbfs_smb_lookup(dnp, name, len, &fattr, scred);
777 if (error)
778 goto out;
779 error = smbfs_nget(VTOVFS(dvp), dvp, name, len, &fattr, &vp);
780 if (error)

--- 23 unchanged lines hidden (view full) ---

804 struct smbnode *np = VTOSMB(vp);
805 struct smb_cred *scred;
806 int error;
807
808 if (dvp == vp)
809 return EINVAL;
810
811 scred = smbfs_malloc_scred();
812 smb_makescred(scred, cnp->cn_thread, cnp->cn_cred);
812 smb_makescred(scred, curthread, cnp->cn_cred);
813 error = smbfs_smb_rmdir(np, scred);
814 if (error == 0)
815 np->n_flag |= NGONE;
816 dnp->n_flag |= NMODIFIED;
817 smbfs_attr_cacheremove(dvp);
818/* cache_purge(dvp);*/
819 cache_purge(vp);
820 smbfs_free_scred(scred);

--- 344 unchanged lines hidden (view full) ---

1165 struct vop_lookup_args /* {
1166 struct vnodeop_desc *a_desc;
1167 struct vnode *a_dvp;
1168 struct vnode **a_vpp;
1169 struct componentname *a_cnp;
1170 } */ *ap;
1171{
1172 struct componentname *cnp = ap->a_cnp;
813 error = smbfs_smb_rmdir(np, scred);
814 if (error == 0)
815 np->n_flag |= NGONE;
816 dnp->n_flag |= NMODIFIED;
817 smbfs_attr_cacheremove(dvp);
818/* cache_purge(dvp);*/
819 cache_purge(vp);
820 smbfs_free_scred(scred);

--- 344 unchanged lines hidden (view full) ---

1165 struct vop_lookup_args /* {
1166 struct vnodeop_desc *a_desc;
1167 struct vnode *a_dvp;
1168 struct vnode **a_vpp;
1169 struct componentname *a_cnp;
1170 } */ *ap;
1171{
1172 struct componentname *cnp = ap->a_cnp;
1173 struct thread *td = cnp->cn_thread;
1173 struct thread *td = curthread;
1174 struct vnode *dvp = ap->a_dvp;
1175 struct vnode **vpp = ap->a_vpp;
1176 struct vnode *vp;
1177 struct smbmount *smp;
1178 struct mount *mp = dvp->v_mount;
1179 struct smbnode *dnp;
1180 struct smbfattr fattr, *fap;
1181 struct smb_cred *scred;

--- 201 unchanged lines hidden ---
1174 struct vnode *dvp = ap->a_dvp;
1175 struct vnode **vpp = ap->a_vpp;
1176 struct vnode *vp;
1177 struct smbmount *smp;
1178 struct mount *mp = dvp->v_mount;
1179 struct smbnode *dnp;
1180 struct smbfattr fattr, *fap;
1181 struct smb_cred *scred;

--- 201 unchanged lines hidden ---